R 在数据帧的每行上选择不同数量的列

R 在数据帧的每行上选择不同数量的列,r,dataframe,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。Base R解决方案 lapply(

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

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。

Base 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的请求进行编辑:

要获得真/假索引矩阵,请使用以下R基解决方案

idx_matrix=col(df)>=df$START+2&col(df)<=df$END+2
df[idx_matrix]

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

您想做什么?例如,对于选定的列,您将做什么?例如,您想要这些列的值之和吗?还有别的吗?像这样的?applydf,1,functionxdf[,seqx[1]+2,x[2]+2]目标是将列表的第I个元素添加到第I行的每个选定单元格中。理想情况下,我希望得到一个由10行乘6列组成的矩阵,每个单元格都是T或F。通过选择数组位置更清晰。理想情况下,在某种真与假的数组中。我的目标是将列表的第I个元素添加到第I行中的每个选定元素。我已编辑了上面的答案。这将为您提供一个正确/错误的索引矩阵。这非常有效,谢谢!原来我是在要求函数col和row!很高兴知道,欢迎您,因为您似乎是Stackoverflow的新手:您可以通过勾选向上/向下投票箭头下方的勾号来接受答案