应用于具有列表列的data.frame

应用于具有列表列的data.frame,r,apply,R,Apply,我想将apply与一列中包含列表的data.frame一起使用。也就是说,一列包含向量,我希望对这些向量执行各种操作。例如,我想知道有多少元素具有特定的值 我犯了什么错 #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)) ex

我想将apply与一列中包含列表的data.frame一起使用。也就是说,一列包含向量,我希望对这些向量执行各种操作。例如,我想知道有多少元素具有特定的值

我犯了什么错

#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)

一些列表我们可以使用
Map
在列中的相应元素之间进行比较

Map(function(x,y) which(x <y), exdf$dv, exdf$edge)
注意:
Map
只是
mappy
的包装,它总是返回一个
列表
输出

或者另一个选项是带有
dplyr
功能的
unnest
(来自
tidyr

library(dplyr)
library(tidyr)
unnest(exdf, .id = "grp") %>%
        group_by(grp) %>%
        summarise(n = sum(dv < edge))
库(dplyr)
图书馆(tidyr)
unnest(exdf,.id=“grp”)%%>%
分组依据(grp)%>%
总结(n=总和(dv
谢谢!如何将“na.rm=TRUE”传递给这些函数?@vanaoveneri您可以使用
summary(n=sum(dv
在第一种情况下
sum(x
library(dplyr)
library(tidyr)
unnest(exdf, .id = "grp") %>%
        group_by(grp) %>%
        summarise(n = sum(dv < edge))