如何根据包含r中列表的数据帧行的某些条件对数据帧进行子集化

时间:2016-03-26 19:46:39

标签: r dataframe

我有一个数据框,其中包含每行数据帧中的值列表。我想检查一些条件,并根据该条件,我想要一个数据帧的子集。例如,在belove代码中,myDF是我的数据帧。那是

ID  Value
A   c(1000, 2000, 3000)
B   c(2000, 500, 1000)


ID <- c("A", "B")
Value  <- list( c(1000, 2000, 3000),  c(2000, 500, 1000))
myDF <- data.frame(ID=ID, Value=cbind(Value))
vec <- c(2000,3000)
##Condition
cnd <- which(myDF$Value[[1]] %in% vec)

上述条件cnd将给出所需的列表,但在将此条件放入子集函数时,它将无法获得正确的索引。

 ld <- lapply(seq(myDF$Value) , function(x) myDF[ which(myDF$Value[[x]] %in% vec),])

这将输出如下。因为在结果中myDF得到的索引是不正确的。

[[1]]
     ID           Value
2     B 2000, 500, 1000
NA <NA>            NULL

[[2]]
     ID           Value
2     B 2000, 500, 1000
NA <NA>            NULL

我想要的输出如下。请帮忙。

     ID  Value
A   c(2000, 3000)
B     2000

1 个答案:

答案 0 :(得分:0)

是你想要的吗?

myDF$Value_filtered <- lapply(seq(myDF$Value), function(i) myDF$Value[[i]][which(myDF$Value[[i]] %in% vec)])

我刚刚为1更改了i(也在函数参数中),否则您的lapply不会在列$Value中的列表上进行循环。< / p>