Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-聚合函数添加新分组列时的不同结果_R_Aggregate Functions - Fatal编程技术网

R-聚合函数添加新分组列时的不同结果

R-聚合函数添加新分组列时的不同结果,r,aggregate-functions,R,Aggregate Functions,我是一个R-初学者,我陷入困境,找不到解决办法。如有任何评论,我们将不胜感激。问题是: 我有一个数据帧df。 这些列被转换为char(属性)和num。 我想通过使用聚合函数来减少数据帧(dply不是一个选项) 当我使用 df_agg <- aggregate(df["AMOUNT"], df[c("ATTRIBUTE1")], sum) df_agg我最好的猜测是您的一些分组列中缺少值。在内置的mtcars数据上进行演示,没有遗漏值,一切正常: sum(mtcars$mpg) # [1]

我是一个R-初学者,我陷入困境,找不到解决办法。如有任何评论,我们将不胜感激。问题是:

我有一个数据帧df。 这些列被转换为char(属性)和num。 我想通过使用聚合函数来减少数据帧(dply不是一个选项)

当我使用

df_agg <- aggregate(df["AMOUNT"], df[c("ATTRIBUTE1")], sum)

df_agg我最好的猜测是您的一些分组列中缺少值。在内置的
mtcars
数据上进行演示,没有遗漏值,一切正常:

sum(mtcars$mpg)
# [1] 642.9
sum(aggregate(mtcars["mpg"], mtcars[c("am")], sum)$mpg)
# [1] 642.9
sum(aggregate(mtcars["mpg"], mtcars[c("am", "cyl")], sum)$mpg)
# [1] 642.9
但如果我们在分组变量中引入缺少的值,则它不会包含在聚合中:

mt = mtcars
mt$cyl[1] = NA
sum(aggregate(mt["mpg"], mt[c("am", "cyl")], sum)$mpg)
# [1] 621.9

最简单的修复方法是用
NA
以外的内容填充缺少的值,可能是字符串
“missing”

,我认为@Gregor已经正确地指出,问题可能是分组变量具有
NA
dplyr
处理变量分组中的
NA
的方式不同于
aggregate

我们有另一种解决方案,即
aggregate
。请注意,该文件建议:

这是线索。您可以使用
exclude=”“
将分组变量转换为
factor
,这将确保
NA
是factor的一部分

set.seed(1)

df <- data.frame(ATTRIBUTE1 = sample(LETTERS[1:3], 10, replace = TRUE),
                 ATTRIBUTE2 = sample(letters[1:3], 10, replace = TRUE),
                 AMOUNT = 1:10)

df$ATTRIBUTE2[5] <- NA


aggregate(df["AMOUNT"], by = list(factor(df$ATTRIBUTE1,exclude = ""),
                                  factor(df$ATTRIBUTE2, exclude="")), sum)

#   Group.1 Group.2 AMOUNT
# 1       A       a      1
# 2       B       a      2
# 3       B       b      9
# 4       C       b     10
# 5       A       c     10
# 6       B       c     11
# 7       C       c      7
# 8       A    <NA>      5

使用factor和exclude=NULL为我实现了这个技巧(exclude=”“不起作用)。非常感谢。是的,在相应的列中有NA。
`by`   a list of grouping elements, each as long as the variables in the data
       frame x. The elements are coerced to factors before use.
set.seed(1)

df <- data.frame(ATTRIBUTE1 = sample(LETTERS[1:3], 10, replace = TRUE),
                 ATTRIBUTE2 = sample(letters[1:3], 10, replace = TRUE),
                 AMOUNT = 1:10)

df$ATTRIBUTE2[5] <- NA


aggregate(df["AMOUNT"], by = list(factor(df$ATTRIBUTE1,exclude = ""),
                                  factor(df$ATTRIBUTE2, exclude="")), sum)

#   Group.1 Group.2 AMOUNT
# 1       A       a      1
# 2       B       a      2
# 3       B       b      9
# 4       C       b     10
# 5       A       c     10
# 6       B       c     11
# 7       C       c      7
# 8       A    <NA>      5
aggregate(df["AMOUNT"], df[c("ATTRIBUTE1", "ATTRIBUTE2")], sum)
#   ATTRIBUTE1 ATTRIBUTE2 AMOUNT
# 1          A          a      1
# 2          B          a      2
# 3          B          b      9
# 4          C          b     10
# 5          A          c     10
# 6          B          c     11
# 7          C          c      7