Can you use a data.frame twice in a dplyr chain? dplyr says " Error: cannot handle "
Can you use a data.frame twice in a dplyr chain? dplyr says " Error: cannot handle "
我正在尝试在 dplyr
链中使用 data.frame 两次。这是一个给出错误的简单示例
df <- data.frame(Value=1:10,Type=rep(c("A","B"),5))
df %>%
group_by(Type) %>%
summarize(X=n()) %>%
mutate(df %>%filter(Value>2) %>%
group_by(Type) %>%
summarize(Y=sum(Value)))
Error: cannot handle
所以想法是首先创建一个 data.frame
,其中包含两列 Value
,这只是一些数据,Type
表明该值来自哪个组。
然后我尝试使用 summarize 来获取每个组中的对象数量,然后在过滤数据后再次使用该对象来获取值的总和。但是我得到了 Error: cannot handle
。知道这里发生了什么吗?
期望输出:
Type X Y
A 5 24
B 5 28
您可以尝试以下方法
df %>%
group_by(Type) %>%
summarise(X = n(), Y = sum(Value[Value > 2]))
# Source: local data frame [2 x 3]
#
# Type X Y
# 1 A 5 24
# 2 B 5 28
我们的想法是仅 Value
按所需条件过滤,而不是整个数据集
还有一个额外的解决方案
library(data.table)
setDT(df)[, .(X = .N, Y = sum(Value[Value > 2])), by = Type]
# Type X Y
# 1: A 5 24
# 2: B 5 28
本来打算向@nongkrong 建议,但他删除了,我们也可以使用 base R
aggregate(Value ~ Type, df, function(x) c(length(x), sum(x[x>2])))
# Type Value.1 Value.2
# 1 A 5 24
# 2 B 5 28
用ifelse()
也很容易做到
df %>% group_by(Type) %>% summarize(X=n(),y=sum( ifelse(Value>2, Value, 0 )))
输出:
Source: local data frame [2 x 3]
Type X y
1 A 5 24
2 B 5 28
我正在尝试在 dplyr
链中使用 data.frame 两次。这是一个给出错误的简单示例
df <- data.frame(Value=1:10,Type=rep(c("A","B"),5))
df %>%
group_by(Type) %>%
summarize(X=n()) %>%
mutate(df %>%filter(Value>2) %>%
group_by(Type) %>%
summarize(Y=sum(Value)))
Error: cannot handle
所以想法是首先创建一个 data.frame
,其中包含两列 Value
,这只是一些数据,Type
表明该值来自哪个组。
然后我尝试使用 summarize 来获取每个组中的对象数量,然后在过滤数据后再次使用该对象来获取值的总和。但是我得到了 Error: cannot handle
。知道这里发生了什么吗?
期望输出:
Type X Y
A 5 24
B 5 28
您可以尝试以下方法
df %>%
group_by(Type) %>%
summarise(X = n(), Y = sum(Value[Value > 2]))
# Source: local data frame [2 x 3]
#
# Type X Y
# 1 A 5 24
# 2 B 5 28
我们的想法是仅 Value
按所需条件过滤,而不是整个数据集
还有一个额外的解决方案
library(data.table)
setDT(df)[, .(X = .N, Y = sum(Value[Value > 2])), by = Type]
# Type X Y
# 1: A 5 24
# 2: B 5 28
本来打算向@nongkrong 建议,但他删除了,我们也可以使用 base R
aggregate(Value ~ Type, df, function(x) c(length(x), sum(x[x>2])))
# Type Value.1 Value.2
# 1 A 5 24
# 2 B 5 28
用ifelse()
df %>% group_by(Type) %>% summarize(X=n(),y=sum( ifelse(Value>2, Value, 0 )))
输出:
Source: local data frame [2 x 3]
Type X y
1 A 5 24
2 B 5 28