'How to do sum and filter in rbind function
I am using an R package which extracts data from tables in a database based on the flag for each table. If the flag is 1, extract data from that table. If the flag is 0, don't extract data.
The extracted data is stored in the person_list_df list as shown below
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)))
Code is below
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)
What I would like to do is
a) Combine/Merge all this and get the sum of counts (for each person)
b) Filter and store only persons who have count > 4
I tried the below but it doesn't work
casesANDcontrols_df[[1]] <- do.call(rbind, persons_list_df) # how to sum and apply filter here?
I would like to combine/merge all of them and sum their counts and finally select persons who have count > 4
I expect my output to be like as shown below
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
The structure of caseANDcontrols_df should be as shown below
Solution 1:[1]
In base R, you can combine the list into one dataframe with do.call +rbind, take sum for each person_id and keep rows where count is greater than 4.
subset(aggregate(count ~ person_id, do.call(rbind, person_list_df), sum), count > 4)
Solution 2:[2]
You can use the rbindlist funciton from data.table, which output a data.table, so you can chain:
bindeddf <- rbindlist(persons_list_df)[,.(count = sum(count)),by = person_id]
bindeddf[count>4]
Solution 3:[3]
Using tidyverse
library(dplyr)
bind_rows(persons_list_df) %>%
group_by(person_id) %>%
summarise(count = sum(count)) %>%
filter(count > 4)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | rwb |
| Solution 2 | |
| Solution 3 | akrun |

