【发布时间】:2015-02-06 04:54:22
【问题描述】:
再试一次,这里有一个更清晰的帐户。
感谢您的回复,但我无法让这些解决方案对我有用;我可能把这个问题和我的例子混淆了。我会更具体的。
这是我在填充新子集之前需要调整的数据
> clientdata$Burn1
[1] 4 3 3 3 2 2 2 3 2 3 2 4 3 2 2 2 2 3 3 3 4 3 3 2 2 2 3 3 4 2 2 2 1 4 2 4 2 3 3 3 4 2 4 3 3 2 3 2 2 3 4 3 3 2 3 3 2 2 3 2 2 2 2 3 2 3 3
> clientdata$Burn2
[1] 2 3 3 2 2 2 2 3 3 4 2 3 3 2 3 3 3 3 4 3 3 4 3 2 2 2 2 4 3 2 4 2 3 3 3 4 3 3 2 2 4 2 3 2 2 2 3 2 3 3 4 3 3 2 3 2 2 2 2 2 2 2 2 2 2 3 3
> clientdata$Forw2
[1] 3 3 3 3 3 4 3 3 3 4 4 3 4 3 3 3 4 3 3 3 4 2 3 2 2 2 4 4 4 2 4 3 3 4 3 4 3 2 4 3 3 3 3 3 2 3 3 2 2 3 4 3 4 2 3 3 4 2 3 3 3 3 3 3 4 3 3
> clientdata$Harm1
[1] 2 2 2 2 3 2 2 2 2 4 2 3 4 2 3 3 3 3 3 3 2 2 2 2 2 3 4 1 2 2 2 1 1 2 2 4 3 3 2 4 1 3 2 3 2 2 2 2 2 2 4 2 3 2 3 2 2 1 2 2 1 2 2 2 2 1 2
> clientdata$Innov1
[1] 3 3 3 3 4 4 3 2 3 4 4 3 4 3 4 4 4 3 4 3 4 2 3 2 3 3 4 4 4 2 4 3 1 4 4 3 3 3 4 4 4 3 1 4 3 3 4 3 2 3 3 2 4 2 3 1 4 2 3 2 3 1 4 3 3 4 2
这是我的变量名向量:
> rev.items.new
[1] "clientdata$Harm1_r" "clientdata$Innov1_r" "clientdata$Burn1_r" "clientdata$Forw2_r" "clientdata$Burn2_r"
现在我希望能够做到这一点,但不是针对那些特定子集进行硬编码(它们可能会因下一个客户而改变);基本上按我的列表填充对象名称,从 5 中减去现有数据子集的值。
clientdata$Burn1_r <- 5 - clientdata$Burn1.
clientdata$Burn2_r <- 5 - clientdata$Burn2
clientdata$Forw2_r <- 5 - clientdata$Forw2
clientdata$Harm1_r <- 5 - clientdata$Harm1
clientdata$Innov1_r <- 5 - clientdata$Innov1
输出应该是
> clientdata$Burn1_r
[1] -1 -2 -2 -2 -3 -3 -3 ...
> clientdata$Burn2_r
[1] -3 -2 -2 -3 -3 -3 -3 ...
> clientdata$Forw2_r
[1] -2 -2 -2 -2 -1 -2 -2 ...
> clientdata$Harm1_r
[1] -3 -3 -3 -3 -2 -3 -3 ...
> clientdata$Innov1_r
[1] -2 -2 -2 -2 -1 -1 -2 ...
这样更清楚吗?很抱歉模棱两可,不擅长寻求帮助。
【问题讨论】:
-
您能否展示一些示例数据集和您的预期输出
-
最近使用
assign()的人有很多问题。我不明白。但是在 R 中,你应该尽量避免它。在列表或向量中收集相关值几乎总是比将它们分配给当前环境中的一堆不同变量更有意义。 -
当项目在列表中时,您可以使用
data[[paste0(as.character(names[i]),"_new")]]获取带有字符串的列表中的值。 -
我已经搜索过了,相信我,我还不太擅长在 Google 中搜索“r”,一定有我遗漏的技巧。为什么assign() 不适用于“data$name”格式,但适用于“name”?另外,Flick 先生,虽然我很欣赏我是新来的,并且重复对 mod 来说很烦人,但您的评论没有链接到任何相关线程。你介意更新它吗,如果不是像我这样从谷歌搜索中找到这个但很难找到其他人的菜鸟。 EDIT* 刚刚收到您的更新,感谢您的代码,我会做更多的研究来完成这项工作。我为这个骗局道歉。