【发布时间】:2019-08-02 15:07:51
【问题描述】:
我有一个超过 100 万行的数据框,以及一天中每个小时的一列。我想改变这些列中的每个值,但该修改取决于值的符号。 我怎样才能有效地做到这一点?
我可以对这些每小时值进行收集(然后传播),但在大数据帧上收集似乎相当慢。 我也可以在所有 24 列上执行相同的 mutate,但是当 mutate_at 看起来能够做到这一点时,这似乎不是一个很好的解决方案。
我可能不得不在不久的将来再次进行这种变异,我希望找到比重复、无聊的代码更好的东西。
df = data.table(
"ID" = c(1,1,1,2,2), #Should not be useful there
"Date" = c(1,2,3,1,2), #Should not be useful there
"total_neg" = c(1,1,0,0,2),
"total_pos" = c(4,5,2,4,5),
"H1" = c(5,4,0,5,-5),
"H2" = c(5,-10,5,5,-5),
"H3" = c(-10,6,5,0,10)
)
我想申请类似的东西
df%>%
mutate_at(c("H1", "H2", "H3"), FUN(ifelse( Hour < 0, Hour*total_neg/10, Hour*total_pos/10)))
Hour 是每列中的值。正如所写的那样,它显然不起作用,“。”也不起作用。但我正在寻找意味着“我们在 mutate_at 中选择的列中的任何值”
如果有帮助,我目前正在使用存储在两列中的每个实际正值和负值的总和对一些值进行非规范化。
在我的示例中,这将是预期的结果:
df = data.table(
"ID" = c(1,1,1,2,2),
"Date" = c(1,2,3,1,2),
"total_neg" = c(1,1,0,0,2),
"total_pos" = c(4,5,2,4,5),
"H1" = c(2,2,0,2,-1),
"H2" = c(2,-1,1,2,-1),
"H3" = c(-1,3,1,0,5)
)
df
提前感谢您提供的任何帮助,我必须为我的错误道歉,但作为非本地人,我向您保证我会尽力而为!
【问题讨论】:
-
应该是
list(~而不是FUN