gpt4 book ai didi

r - dplyr : use mutate with columns that contain lists

转载 作者:行者123 更新时间:2023-12-02 02:34:04 26 4
gpt4 key购买 nike

我有以下数据框(很抱歉没有提供 dput 的示例,当我将其粘贴到此处时,它似乎不适用于列表):

data

现在我正在尝试创建一个新列y,它为ref_amount的每个元素获取mnt_operef_amount之间的差异。结果将是,每一行中的元素数量与 ref_amount 的相应值相同。

我已经尝试过:

data <- data %>%
mutate( y = mnt_ope - ref_amount)

但我收到错误:

计算错误:二元运算符的非数字参数。

使用dput:

structure(list(mnt_ope = c(500, 500, 771.07, 770.26, 770.26, 
770.26, 770.72, 770.72, 770.72, 770.72, 770.72, 779.95, 779.95,
779.95, 779.95, 2502.34, 810.89, 810.89, 810.89, 810.89, 810.89
), ref_amount = list(c(500, 500), c(500, 500), c(771.07, 770.26,
770.26), c(771.07, 770.26, 770.26), c(771.07, 770.26, 770.26),
c(771.07, 770.26, 770.26), c(771.07, 770.26, 770.26), c(771.07,
770.26, 770.26), c(771.07, 770.26, 770.26), c(771.07, 770.26,
770.26), c(771.07, 770.26, 770.26), c(771.07, 770.26, 770.26
), c(771.07, 770.26, 770.26), c(771.07, 770.26, 770.26),
c(771.07, 770.26, 770.26), 2502.34, c(810.89, 810.89, 810.89
), c(810.89, 810.89, 810.89), c(810.89, 810.89, 810.89),
c(810.89, 810.89, 810.89), c(810.89, 810.89, 810.89))), row.names = c(NA,
-21L), class = c("tbl_df", "tbl", "data.frame"))

最佳答案

您不能使用 dplyr 以这种方式直接从列表列中减去。我发现完成您引用的任务的最佳方法是使用 purrr::map 。其工作原理如下:

data <- data %>%
mutate(y = map2(mnt_ope, ref_amount, function(x, y){
x - y
}))

或者,更简洁地说:

data <- data %>%
mutate(y = map2(mnt_ope, ref_amount, ~.x - .y))

map2这里将两个输入函数应用于两个向量(在您的例子中,数据帧的两列)并将结果作为向量返回(我们使用 mutate 将其附加回您的数据帧)。

希望有帮助!

关于r - dplyr : use mutate with columns that contain lists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51156614/

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