这个问题是关于在数据帧的每一行上选择不同数量的列。我有一个数据框:
df = data.frame(
START=sample(1:2, 10, repace=T), END=sample(2:4, 10, replace=T),
X1=rnorm(10), X2=rnorm(10), X3=rnorm(10), X4=rnorm(10)
)
我想有一种没有循环的方法来为我的数据框的所有行选择第i行的列(START [i]:END [i])+ 2.
答案 0 :(得分:0)
基础R解决方案
lapply(split(df,1:nrow(df)),function(row) row[(row$START+2):(row$END+2)])
或类似于上面评论中给出的内容(我会将输出存储在列表中)
library(plyr)
alply(df,1,function(row) row[(row$START+2):(row$END+2)])
根据OP的请求进行编辑:
要获得TRUE / FALSE索引矩阵,请使用以下R基本解决方案
idx_matrix=col(df)>=df$START+2&col(df)<=df$END+2
df[idx_matrix]
但请注意,此处丢失了一些信息(与基于列表的解决方案相比)。