如何在 rbind 函数中进行求和和过滤
How to do sum and filter in rbind function
我正在使用一个 R 包,它根据每个 table 的标志从数据库中的 table 中提取数据。如果标志是 1
,则从 table 中提取数据。如果标志是 0
,请不要提取数据。
提取的数据存储在如下所示的person_list_df
列表中
list(structure(list(person_id = 21:25, count = 2:6), class = "data.frame", row.names = c(NA,
-5L)), structure(list(person_id = 24:28, count = 3:7), class = "data.frame", row.names = c(NA,
-5L)))
代码如下
person_list_df = list()
casesANDcontrols_df = list()
list1 <- data.frame("person_id" = 21:25, "count" = 2:6)
list2 <- data.frame("person_id" = 24:28, "count" = 3:7)
person_list_df <- list(list1, list2)
我想做的是
a) Combine/Merge 所有这些并得到计数总和(对于每个人)
b) 仅过滤并存储计数 > 4
的人
我尝试了下面的方法,但它不起作用
casesANDcontrols_df[[1]] <- do.call(rbind, persons_list_df) # how to sum and apply filter here?
我想 combine/merge 所有人并对他们的计数求和,最后 select 计数 > 4 的人
我希望我的输出如下所示
casesANDcontrols_df[[1]]
person_id
1 24 #COUNT IS 8
2 25 #COUNT IS 10
3 26 #COUNT IS 5
4 27 #COUNT IS 6
5 28 #COUNT IS 7
caseANDcontrols_df
的结构应该如下图
您可以使用 data.table
中的 [=f11=] 函数,它输出一个 data.table
,因此您可以链接:
bindeddf <- rbindlist(persons_list_df)[,.(count = sum(count)),by = person_id]
bindeddf[count>4]
在 base R 中,您可以使用 do.call
+rbind
将列表组合成一个数据帧,每个 person_id
取 sum
并保留行 [=15] =] 大于 4.
subset(aggregate(count ~ person_id, do.call(rbind, person_list_df), sum), count > 4)
使用tidyverse
library(dplyr)
bind_rows(persons_list_df) %>%
group_by(person_id) %>%
summarise(count = sum(count)) %>%
filter(count > 4)
我正在使用一个 R 包,它根据每个 table 的标志从数据库中的 table 中提取数据。如果标志是 1
,则从 table 中提取数据。如果标志是 0
,请不要提取数据。
提取的数据存储在如下所示的person_list_df
列表中
list(structure(list(person_id = 21:25, count = 2:6), class = "data.frame", row.names = c(NA,
-5L)), structure(list(person_id = 24:28, count = 3:7), class = "data.frame", row.names = c(NA,
-5L)))
代码如下
person_list_df = list()
casesANDcontrols_df = list()
list1 <- data.frame("person_id" = 21:25, "count" = 2:6)
list2 <- data.frame("person_id" = 24:28, "count" = 3:7)
person_list_df <- list(list1, list2)
我想做的是
a) Combine/Merge 所有这些并得到计数总和(对于每个人)
b) 仅过滤并存储计数 > 4
的人我尝试了下面的方法,但它不起作用
casesANDcontrols_df[[1]] <- do.call(rbind, persons_list_df) # how to sum and apply filter here?
我想 combine/merge 所有人并对他们的计数求和,最后 select 计数 > 4 的人
我希望我的输出如下所示
casesANDcontrols_df[[1]]
person_id
1 24 #COUNT IS 8
2 25 #COUNT IS 10
3 26 #COUNT IS 5
4 27 #COUNT IS 6
5 28 #COUNT IS 7
caseANDcontrols_df
的结构应该如下图
您可以使用 data.table
中的 [=f11=] 函数,它输出一个 data.table
,因此您可以链接:
bindeddf <- rbindlist(persons_list_df)[,.(count = sum(count)),by = person_id]
bindeddf[count>4]
在 base R 中,您可以使用 do.call
+rbind
将列表组合成一个数据帧,每个 person_id
取 sum
并保留行 [=15] =] 大于 4.
subset(aggregate(count ~ person_id, do.call(rbind, person_list_df), sum), count > 4)
使用tidyverse
library(dplyr)
bind_rows(persons_list_df) %>%
group_by(person_id) %>%
summarise(count = sum(count)) %>%
filter(count > 4)