R 垂直计算列表中某个条件的出现次数,并将结果存储在列表中?

R 垂直计算列表中某个条件的出现次数,并将结果存储在列表中?,r,dplyr,R,Dplyr,假设我有一个数据框,其中包含给定测试的三种状态及其结果,存储为列表: list1 <- list(c(-40, 22, 10)) list2 <- list(c(-1, 18, -39)) list3 <- list(c(22, -5, 2)) dat <- data.frame(State = c("Iowa", "Wisconsin", "Ohio")) dat$Tests <- c(list1, l

假设我有一个数据框,其中包含给定测试的三种状态及其结果,存储为列表:

list1 <- list(c(-40, 22, 10))
list2 <- list(c(-1, 18, -39))
list3 <- list(c(22, -5, 2))

dat <- data.frame(State = c("Iowa", "Wisconsin", "Ohio"))
dat$Tests <- c(list1, list2, list3)

list1您可以创建一个由
Tests
组成的矩阵,并使用
colSums
计算每列中的负值数量

colSums(do.call(rbind, dat$Tests) < 0)
#[1] 2 1 1

您可以创建一个由
测试
组成的矩阵,并使用
列和
计算每列中的负值数量

colSums(do.call(rbind, dat$Tests) < 0)
#[1] 2 1 1

我们可以使用
tidyverse
方法

library(dplyr)
library(purrr)
dat %>% 
    mutate(Results = map(Tests, `<`, 0) %>% 
          reduce(`+`))
#      State       Tests Results
#1      Iowa -40, 22, 10       2
#2 Wisconsin -1, 18, -39       1
#3      Ohio   22, -5, 2       1

我们可以使用
tidyverse
方法

library(dplyr)
library(purrr)
dat %>% 
    mutate(Results = map(Tests, `<`, 0) %>% 
          reduce(`+`))
#      State       Tests Results
#1      Iowa -40, 22, 10       2
#2 Wisconsin -1, 18, -39       1
#3      Ohio   22, -5, 2       1

Ronak,如果列表未命名且具有默认值[[1]]、[[2]]?对于
bind_rows
您需要先将其转换为dataframe/tibble。这很好,谢谢@Ronaksha!问题:如何将其插入
dplyr
管道链?例如:
sum\u results%rowSums(dplyr::bind\u cols(Tests)<0)%%>%other\u stuff\u使用\u dplyr
@RonakShah Nevermind,我找到了如何使其工作的方法。再次感谢。Ronak,如果列表未命名且具有默认值[[1]]、[[2]],则无法绑定行。对于
bind_行
,您需要先将其转换为dataframe/tibble。这很好,谢谢@Ronaksha!问题:如何将其插入
dplyr
管道链?例如:
sum\u results%rowSums(dplyr::bind\u cols(Tests)<0)%%>%other\u stuff\u使用\u dplyr
@RonakShah Nevermind,我找到了如何使其工作的方法。再次感谢。
dat$Results <- Reduce(`+`, lapply(dat$Tests, `<`, 0))
dat$Results
#[1] 2 1 1