我有一个数据框,其中包含每行数据帧中的值列表。我想检查一些条件,并根据该条件,我想要一个数据帧的子集。例如,在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
答案 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>