繁体   English   中英

dplyr汇总和group_by获取唯一值

[英]dplyr summarise and group_by for unique values

这是一个代表性的例子:

DF <- as.data.frame(matrix(data = 0, nrow = 9, ncol = 3))
colnames(DF) <- c("code", "actual", "expected")

DF$code <- letters[rep(1:3, each = 3)]
DF$actual <- runif(9, 3,5)
DF$expected <- rep(1:3, each = 3)

以下崩溃:

  DF %>%
  group_by(code) %>%
  summarise(Exp = expected)
 Error: expecting a single value

但是,以下工作:

DF %>%
  group_by(code) %>%
  summarise(Exp = unique(expected))

但是,代码的唯一值只是一个值。 为什么不回报价值工作? 为什么我需要将其包装成“独特”?

谢谢!

这是一个常见的错误。 调试它的一种方法是在汇总调用中使用paste()。

> DF %>% 
     group_by(code) %>% 
     summarise(Exp=paste(expected, collapse='-'))

Source: local data frame [3 x 2]

   code   Exp
  (chr) (chr)
1     a 1-1-1
2     b 2-2-2
3     c 3-3-3

你看到发生了什么事吗? 您正在尝试将多个值分配给单个组。

一种解决方案是使用您描述的唯一。 或者,如果您知道具有相同代码的所有行始终具有相同的预期值,则可以直接group_by:

> DF%>% group_by(code, expected) %>% summarise()
Source: local data frame [3 x 2]
Groups: code [?]

   code expected
  (chr)    (int)
1     a        1
2     b        2
3     c        3

如果数据帧很大,group_by将比基于unique()的解决方案快得多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM