【问题标题】:How to subset a dataframe based on some conditions over the rows of dataframe that contains list in r如何根据某些条件对包含 r 中列表的数据帧行进行数据帧的子集化
【发布时间】:2016-03-26 19:46:39
【问题描述】:

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

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    这就是你想要的吗?

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

    我刚刚将1 更改为i(也在函数参数中),否则您的lapply 不会遍历$Value 列中的列表。

    【讨论】:

    • 抱歉,这是一个打字错误。它工作正常,这就是我想要的。
    • 除此之外还有什么办法。我无法通过在 r 中使用子集函数来实现这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2019-10-21
    • 1970-01-01
    相关资源
    最近更新 更多