% summarize(X=n()) %>% mu-6ren">
gpt4 book ai didi

r - 你能在 dplyr 链中使用 data.frame 两次吗? dplyr 说 "Error: cannot handle "

转载 作者:行者123 更新时间:2023-12-02 06:32:09 27 4
gpt4 key购买 nike

我正在尝试在 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 来获取每个组中的对象数量,然后在过滤数据后再次使用该对象来获取值的总和。但是我得到了 错误:无法处理。知道这里发生了什么吗?

期望的输出:

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

关于r - 你能在 dplyr 链中使用 data.frame 两次吗? dplyr 说 "Error: cannot handle ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31996388/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com