对列进行求和,而另一列取特定值

时间:2015-01-30 20:52:15

标签: r

输入:

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列中的字符串。

2 个答案:

答案 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