适用于带有列表列的data.frame

时间:2016-09-13 09:52:45

标签: r apply

我想使用apply包含一列中包含列表的data.frame。也就是说,一列包含向量和I棒以对这些向量执行各种操作。例如,我想找出具有特定值的元素数量。

我的错误是什么?

#reproducible code
set.seed(1)
some_list <- replicate(40, sample(c(1:8), size=sample(3:6, 1), replace=TRUE))
exdf <- expand.grid(id=c(1:10), content=c(1:4))
exdf$dv <- some_list
exdf$edge <- replicate(40, sample(3:5, size=1))

#Prolem: get elements with lesser value than "edge" in "dv"
result <- sapply(dv~., data=exdf, function(x) which(x[, "dv"] < x[, "edge"]))

1 个答案:

答案 0 :(得分:1)

我们可以使用Map对列

中的相应元素进行比较
Map(function(x,y) which(x <y), exdf$dv, exdf$edge)

如果我们只对元素数量感兴趣,请使用summapply,它会返回vector

mapply(function(x,y) sum(x <y), exdf$dv, exdf$edge)

注意:Map只是mapply的包装器,它始终返回list输出。

或另一个选项unnest(来自tidyrdplyr个功能

library(dplyr)
library(tidyr)
unnest(exdf, .id = "grp") %>%
        group_by(grp) %>%
        summarise(n = sum(dv < edge))