【发布时间】:2017-08-07 11:02:07
【问题描述】:
我不确定标题是否用词好,但情况如下:
我有一个元数据数据集,其中可以包含任意数量的行,例如:
Control_DF <- cbind.data.frame(
Scenario = c("A","B","C")
,Variable = c("V1","V2","V3")
,Weight = c("w1","w2","w3")
)
使用 Control_DF 中包含的数据,我想在我的主数据集上创建每个变量的新版本,我将变量乘以权重。因此,如果我的主要数据集如下所示:
Main_Data <- cbind.data.frame(
V1 = c(1,2,3,4)
,V2 = c(2,3,4,5)
,V2 = c(3,4,5,6)
,w1 = c(0.1,0.5,1,0.8)
,w2 = c(0.2,1,0.3,0.6)
,w2 = c(0.3,0.7,0.1,0.2)
)
然后,在开放代码中,我想要做的看起来像这样:
New_Data <- Main_Data %>%
mutate(
weighted_V1 = V1 * w1
,weighted_V2 = V2 * w2
,weighted_V3 = V3 * w3
)
但是,我需要一种不对其进行硬编码的方法,并且要引用的变量数量是任意的。
谁能帮帮我?
【问题讨论】:
-
不想硬编码的逻辑是什么?
-
在我的示例中,我们有 V1-V3,但在应用中,我可能有 V1 - V10,或 V1 - V76 等。dplyr 的美妙之处在于简洁、可读的代码,但我'我努力将其扩展到问题。我可以做 lappy 什么的,但我认为它的效率会降低,而且它的可读性肯定会降低,这对我来说不太理想。
-
如果我能以某种方式将 "weighted_V1 = V1 * w1,...,weighted_Vn = Vn * wn" 放入一个字符串,然后将其“粘贴并执行”到 mutate 函数中,那就太好了!