基于R中的其他值对列中的值求和

时间:2015-10-22 21:18:55

标签: r for-loop dataframe

我对R比较陌生,而且我在创建一个基于其他值对某些值求和的向量时遇到了麻烦。我不太确定问题是什么。我没有收到错误,但输出不是我想要的。这是一个可重复的例子:

fakeprice <- c(1, 2, 2, 1, NA, 5, 4, 4, 3, 3, NA)
fakeconversion <-c(.2, .15, .07, .25, NA, .4, .36, NA, .67, .42, .01)
fakedata <- data.frame(fakeprice, fakeconversion)
fake.list <- sort(unique(fakedata$fakeprice))
fake.sum <- vector(,5)

所以,fakedata看起来像是:

   fakeprice fakeconversion
1          1           0.20
2          2           0.15
3          2           0.07
4          1           0.25
5         NA             NA
6          5           0.40
7          4           0.36
8          4             NA
9          3           0.67
10         3           0.42
11        NA           0.01

我认为问题在于NA,但我不太确定(原始数据集中有很多)。这是带有嵌套if语句的for循环。当价格为“NA”时我不断收到错误,因此我添加了is.na()

    for(i in fake.list){
      sum=0
      for(j in fakedata$fakeprice){
        if(is.na(fakedata$fakeprice[j])==TRUE){
          NULL
        } else {
          if(fakedata$fakeprice[j]==fake.list[i]){
            sum <- sum+fakedata$fakeconversion[j]
          }}
      }
      fake.sum[i]=sum
    } 
sumdata <- data.frame(fake.list, fake.sum)

我正在寻找每个独特价格加起来fakeconversion的输出。因此,对于fakeprice=1fake.sum=0.45。我要查找的结果数据如下:

   fake.list       fake.sum
1          1           0.45
2          2           0.22
3          3           1.09
4          4           0.36
5          5           0.40

然而,我得到的是:

 sumdata
  fake.list fake.sum
1         1     0.90
2         2     0.44
3         3     0.00
4         4     0.00
5         5     0.00

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

aggregate(fakedata$fakeconversion, list(price = fakedata$fakeprice), sum, na.rm = TRUE) 

以上内容将处理NA fakeprice中的4

aggregate函数的工作原理是将数据by分类,然后运行函数FUN

所以:

aggregate(x, by, FUN, ...,)

x是您希望运行FUN的内容。如果您希望按多列拆分数据,可以为By提供一个列表。