gpt4 book ai didi

使用 mutate 和 rowwise 返回列表

转载 作者:行者123 更新时间:2023-12-04 10:46:35 24 4
gpt4 key购买 nike

我尝试使用 mutate 和 rowwise 返回一个列表,但出现代码中显示的错误。这些问题Q1 Q2有帮助,但我想通过使用 rowwise() 迭代行来保持简单,并且问题已经有 3 年 7 个月了。谢谢。

library(tidyverse)    
df <- data.frame(Name=c("a","a","b","b","c"),X=c(1,2,3,4,5), Y=c(2,3,4,2,2))

TestFn <- function(X,Y){
Z <- list(X*5,Y/2,X+Y,X*2+5*Y)
return (Z)
}

#this works
SingleResult <- TestFn(5,20)

#error - Error in mutate_impl(.data, dots) : incompatible size (4), expecting 1 (the group size) or 1
dfResult <- df %>%
rowwise() %>%
mutate(R=TestFn(X,Y))

最佳答案

tidyverse 现在可以让您嵌套复杂的数据结构

tidyverse解决方案

df %>%
mutate(copyX = X, copyY = Y) %>%
nest(copyX, copyY) %>%
mutate(data = map(data, ~TestFn(.x$copyX, .x$copyY)))

输出

    Name     X     Y       data
<fctr> <dbl> <dbl> <list>
1 a 1 2 <list [4]>
2 a 2 3 <list [4]>
3 b 3 4 <list [4]>
4 b 4 2 <list [4]>
5 c 5 2 <list [4]>

如何转换为数据框?

由于您的函数返回一个列表,因此我在取消嵌套之前添加了一个额外的步骤

df %>%
mutate(copyX = X, copyY = Y) %>%
nest(copyX, copyY) %>%
mutate(data = map(data, ~TestFn(.x$copyX, .x$copyY))) %>%
mutate(data = map(data, ~unlist(.x))) %>%
unnest(data)

输出

     Name     X     Y  data
<fctr> <dbl> <dbl> <dbl>
1 a 1 2 5.0
2 a 1 2 1.0
3 a 1 2 3.0
4 a 1 2 12.0
5 a 2 3 10.0
6 a 2 3 1.5
# etc

关于使用 mutate 和 rowwise 返回列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46106423/

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