我对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=1
,fake.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
非常感谢任何帮助!
答案 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
提供一个列表。