我有一个表,该表(经过一些初始处理)具有多个具有相同主标识符但具有不同列值(0或值> 0)的行。
示例表 主要标识符为“生产”
df = data.frame(produce = c("apples","apples", "bananas","bananas"),
grocery1=c(0,1,1,1),
grocery2=c(1,0,1,1),
grocery3=c(0,0,1,1))
###########################
> df
produce grocery1 grocery2 grocery3
1 apples 0 1 0
2 apples 1 0 0
3 bananas 1 1 1
4 bananas 1 1 1
我想折叠(或合并?)具有相同标识符的行,并在每列中保留非空(此处为任何非零值)值
所需输出示例
shopping grocery1 grocery2 grocery3
1 apples 1 1 0
2 bananas 1 1 1
我缺少的 tidyverse 中有一个简单的函数或管道可以处理吗?
答案 0 :(得分:2)
使用底数为aggregate
的
aggregate(.~produce, df, function(x) +any(x > 0))
# produce grocery1 grocery2 grocery3
#1 apples 1 1 0
#2 bananas 1 1 1
或使用dplyr
library(dplyr)
df %>%
group_by(produce) %>%
summarise_all(~+any(. > 0))
# produce grocery1 grocery2 grocery3
# <fct> <int> <int> <int>
#1 apples 1 1 0
#2 bananas 1 1 1
与data.table
library(data.table)
setDT(df)[, lapply(.SD, function(x) +any(x > 0)), by=produce]
答案 1 :(得分:1)
我们可以使用max
library(dplyr)
df %>%
group_by(produce) %>%
summarise_all(max)
# A tibble: 2 x 4
# produce grocery1 grocery2 grocery3
# <fct> <dbl> <dbl> <dbl>
#1 apples 1 1 0
#2 bananas 1 1 1