在数据框的每一行上选择不同数量的列

时间:2013-11-16 01:28:36

标签: r dataframe

这个问题是关于在数据帧的每一行上选择不同数量的列。我有一个数据框:

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.

1 个答案:

答案 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]

但请注意,此处丢失了一些信息(与基于列表的解决方案相比)。