如何匹配列表中不同长度的列?rowwise()实现困惑
在R中对齐向量并保留列名的解决方案
首先纠正向量创建的语法错误:R中创建向量需要用c()而非(),正确定义如下:
A <- c(1, 2, 3, 4) B <- c(1:24) C <- c(1, 2, 3, 4)
你不需要用rowwise(),这个函数多用于逐行计算,你的需求是按固定规则提取B的元素并与A、C对齐,直接通过索引取值即可实现。
方案1:匹配你描述的规则(A第2个→B第6个,A第3个→B第12个,依此类推,A第1个对应B第1个)
# 定义需要保留的B元素的索引 target_indices <- c(1, 6, 12, 18) # 构造对齐后的带列名数据框 result <- data.frame( A = A, B = B[target_indices], C = C ) # 查看结果 print(result)
运行输出:
A B C 1 1 1 1 2 2 6 2 3 3 12 3 4 4 18 4
方案2:通用分组提取(若A/C长度为n,B长度为6n,取每组第6个元素与A/C对齐)
如果你的逻辑是A的第i个元素对应B中第6*i个元素(即每6个B元素取最后一个),可以用更通用的写法:
# 自动生成索引,从6开始,步长6,直到B的末尾 target_indices <- seq(from=6, to=length(B), by=6) result <- data.frame( A = A, B = B[target_indices], C = C )
运行输出:
A B C 1 1 6 1 2 2 12 2 3 3 18 3 4 4 24 4
内容的提问来源于stack exchange,提问作者Aaron Sanchez
相关产品推荐
相关产品推荐

