【发布时间】:2015-08-03 03:28:57
【问题描述】:
刚刚学习 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)])
它再次崩溃,“选择了未定义的列”
【问题讨论】: