dplyr summarize 和 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))
但是,代码的唯一值只是一个值。为什么 returnign 值不起作用?为什么我需要将它包装在 "unique" 中?
谢谢!
这是一个常见的错误。调试它的一种方法是在汇总调用中使用 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
你看到发生了什么事了吗?您正在尝试将多个值分配给一个组。
一种解决方案是按照您的描述使用 unique。或者,如果您知道具有相同代码的所有行始终具有相同的期望值,则可以直接 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
如果dataframe很大,group_by会比基于unique()
的解决方案快很多
这是一个代表性的例子:
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))
但是,代码的唯一值只是一个值。为什么 returnign 值不起作用?为什么我需要将它包装在 "unique" 中?
谢谢!
这是一个常见的错误。调试它的一种方法是在汇总调用中使用 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
你看到发生了什么事了吗?您正在尝试将多个值分配给一个组。
一种解决方案是按照您的描述使用 unique。或者,如果您知道具有相同代码的所有行始终具有相同的期望值,则可以直接 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
如果dataframe很大,group_by会比基于unique()
的解决方案快很多