【发布时间】:2015-06-08 15:10:28
【问题描述】:
这是一个有代表性的例子:
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))
但是,代码的唯一值只是一个值。为什么不返回值工作?为什么我需要把它包在一个“独特的”中?
谢谢!
【问题讨论】:
-
均值、中位数、标准差还是什么?
summarise(Exp = mean(expected))? -
我只是想让它报告实际值。不是平均值,中位数或任何东西。就这一个值。看我的例子。
-
因为你试图将一个向量分配给一个单一的值,比如
c(1,1,1)。group_by告诉summarise它应该只期望一个值。在某些情况下,即使unique也会因为这种逻辑而失败。试试DF$expected <- 1:9 ; DF %>% group_by(code) %>% summarise(Exp = unique(expected))。但这主要只是dplyr废话。比如data.table,顾不上library(data.table) ; setDT(DF)[, list(Exp = expected), by = code] -
@DavidArenburg:啊,所以你说“独特”是要走的路。如果它不是唯一的,那么代码就会崩溃,因为结果向量会比一个长?
-
mutate怎么样?