【发布时间】:2015-08-25 16:22:04
【问题描述】:
l_ply 或其他类似 apply 的函数是否能够将结果插入现有数据框?
这是一个简单的例子......
假设我有以下数据框:
mydata <- data.frame(input1=1:3, input2=4:6, result1=NA, result2=NA)
input1 input2 result1 result2
1 1 4 NA NA
2 2 5 NA NA
3 3 6 NA NA
我想遍历行,执行操作,然后在result1 和result2 列中插入答案。我试过了:
l_ply(1:nrow(mydata), function(i) {
mydata[i,"result1"] <- mydata[i,"input1"] + mydata[i,"input2"]
mydata[i,"result2"] <- mydata[i,"input1"] * mydata[i,"input2"]})
但我在结果列中取回了带有NA's 的原始数据框。
附:我已经读过这个post,但它并没有完全回答我的问题。我有几个结果列,我想要执行的操作比上面的操作更复杂,所以我更喜欢 not 单独计算列,然后将它们添加到数据框中作为帖子建议。
【问题讨论】:
-
library(dplyr); mydata %>% mutate(result1 = input1 + input2, result2 = input1 * input2) -
你的计算比上面的复杂到什么程度? @Vlo 击败了我,你做到了。并不是我预期会有什么不同。
-
@maj 当我提到我的计算更复杂时,我的意思是
input1是人口 ID 号,input2表示抽样方法,input3是样本大小。每个组合代表一个场景。我创建了计算每个场景的路径、样本、运行时等数量的函数。这是我想在结果列中生成的输出。 -
在任何情况下,如果您在每一行上执行相同的操作,无论多么复杂,这意味着不对数据子集进行不同的处理,那么您可以使用@BondedDust 建议的解决方案和我自己,没有任何循环或 *apply 函数,也不一定使用 plyr,我个人觉得这经常很混乱。