输入:
a 3 hi
a 4 hi
a NA hi
b 7 lo
b 2 lo
b 3 lo
c 1 hi
c 6 hi
期望的输出:
a 7 hi
b 12 lo
c 7 hi
基本上我想获得第二列的总和,而第1列采用唯一值。我还想获得与第1列中每个唯一值相关联的第3列中的字符串。
答案 0 :(得分:1)
dat <- data.frame(letters = c('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c'), numbers = c(3, 4, NA, 7, 2, 3, 1, 6), chars = c("hi", "hi", "hi", "lo", "lo", "lo", "hi", "hi"))
使用dplyr
:
library(dplyr)
dat %>%
group_by(letters, chars) %>%
summarise(n = sum(numbers, na.rm = TRUE))
Source: local data frame [3 x 3]
Groups: letters
letters chars n
1 a hi 7
2 b lo 12
3 c hi 7
使用plyr
:
library(plyr)
ddply(dat, c("letters", "chars"), 'summarise', n = sum(numbers, na.rm = TRUE))
letters chars summarise
1 a hi 7
2 b lo 12
3 c hi 7
你基本上想要一些split-apply-combine方法的变体。
答案 1 :(得分:1)
使用data.table
:
> library(data.table)
> setDF(dat)
> dat[,list(sum(numbers, na.rm=T), unique(chars)), by=letters]
letters V1 V2
1: a 7 hi
2: b 12 lo
3: c 7 hi