gpt4 book ai didi

dplyr mutate 中的递归错误

转载 作者:行者123 更新时间:2023-12-02 05:16:47 25 4
gpt4 key购买 nike

刚刚学习 dplyr (和 R),我不明白为什么会失败或者正确的方法是什么。我正在寻找一般性的解释,而不是针对这个人为数据集的特定内容。

假设我有 3 个带乘数的文件大小,我想将它们合并到一个数字列中。

require(dplyr)

m <- data.frame(
K = 1E3,
M = 1E6,
G = 1E9
)

s <- data.frame(
size = 1:3,
mult = c('K', 'M', 'G')
)

现在我想将大小乘以它的乘数,所以我尝试了:

mutate(s, total = size * m[[mult]])

#Error in .subset2(x, i, exact = exact) :
# recursive indexing failed at level 2

这会引发错误。我也尝试过:

mutate(s, total = size * as.numeric(m[mult]))

#1 1 K 1e+06
#2 2 M 2e+09
#3 3 G 3e+03

这比错误(错误答案)更糟糕!

我尝试了很多其他排列,但找不到答案。

提前致谢!

<小时/>

编辑:
(或者这应该是另一个问题)
akrun 的回答非常有效,我以为我理解了,但是如果我

rbind(s, c(4, NA))

然后将变异更新为

mutate(s, total = size * 
ifelse(is.na(mult), 1,
unlist(m[as.character(mult)])

它再次崩溃,并显示“选择了未定义的列”

最佳答案

“mult”列是“factor”类。将其转换为“字符”以对“m”、“unlist”进行子集化,然后乘以“size”

 mutate(s, new= size*unlist(m[as.character(mult)]))
# size mult new
#1 1 K 1e+03
#2 2 M 2e+06
#3 3 G 3e+09

如果我们看看“因素”列如何根据“级别”发挥作用

 m[s$mult]
# M G K
#1 1e+06 1e+09 1000

通过在 names(m)levels(s$mult) 之间使用 match,我们获得相同的输出顺序

>
  m[match(names(m), levels(s$mult))]
# M G K
#1 1e+06 1e+09 1000

所以,这可能是您得到不同结果的原因

关于dplyr mutate 中的递归错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30374143/

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