我想使用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"]))
答案 0 :(得分:1)
我们可以使用Map
对列
Map(function(x,y) which(x <y), exdf$dv, exdf$edge)
如果我们只对元素数量感兴趣,请使用sum
和mapply
,它会返回vector
mapply(function(x,y) sum(x <y), exdf$dv, exdf$edge)
注意:Map
只是mapply
的包装器,它始终返回list
输出。
或另一个选项unnest
(来自tidyr
)dplyr
个功能
library(dplyr)
library(tidyr)
unnest(exdf, .id = "grp") %>%
group_by(grp) %>%
summarise(n = sum(dv < edge))