gpt4 book ai didi

r - dplyr 总结 : create variables from named vector

转载 作者:行者123 更新时间:2023-12-04 05:30:09 25 4
gpt4 key购买 nike

这是我的问题:

我正在使用一个返回命名向量的函数。这是一个玩具示例:

toy_fn <- function(x) {
y <- c(mean(x), sum(x), median(x), sd(x))
names(y) <- c("Right", "Wrong", "Unanswered", "Invalid")
y
}

我在 dplyr 中使用 group_by 来为每个组应用这个函数(典型的拆分-应用-组合)。所以,这是我的玩具 data.frame:
set.seed(1234567)
toy_df <- data.frame(id = 1:1000,
group = sample(letters, 1000, replace = TRUE),
value = runif(1000))

这是我的目标:
toy_summary <- 
toy_df %>%
group_by(group) %>%
summarize(Right = toy_fn(value)["Right"],
Wrong = toy_fn(value)["Wrong"],
Unanswered = toy_fn(value)["Unanswered"],
Invalid = toy_fn(value)["Invalid"])

> toy_summary
Source: local data frame [26 x 5]

group Right Wrong Unanswered Invalid
1 a 0.5038394 20.15358 0.5905526 0.2846468
2 b 0.5048040 15.64892 0.5163702 0.2994544
3 c 0.5029442 21.62660 0.5072733 0.2465612
4 d 0.5124601 14.86134 0.5382463 0.2681955
5 e 0.4649483 17.66804 0.4426197 0.3075080
6 f 0.5622644 12.36982 0.6330269 0.2850609
7 g 0.4675324 14.96104 0.4692404 0.2746589

有用!但是调用同一个函数四次并不酷。我宁愿 dplyr 获取命名向量并为向量中的每个元素创建一个新变量。像这样的东西:
toy_summary <- 
toy_df %>%
group_by(group) %>%
summarize(toy_fn(value))

不幸的是,这不起作用,因为“错误:期望一个值”。

我想,好吧,让我们使用 data.frame 将向量转换为 data.frame(as.list(x)) 。但这也不起作用。我尝试了很多东西,但我无法欺骗 dplyr 认为它实际上正在接收 4 个不同变量的单个值(观察)。有什么方法可以帮助 dplyr 意识到这一点吗?

最佳答案

你也可以用 do() 试试这个:

toy_df %>%
group_by(group) %>%
do(res = toy_fn(.$value))

关于r - dplyr 总结 : create variables from named vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30441363/

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