我有数据框df1:
df1 <- data.frame(variable1=sample(letters[1:5], 5, replace=T),
variable2=sample(letters[1:5], 5, replace=T),
correlation=runif(5, 0,1))
包含5个变量之间的相关性,因此是一个25行(5 ^ 2)和3列的数据框,看起来像这样
df1变量1变量2相关 1 b 1 2个月c 0.07478433 3个月0.81535674 4 e c 0.79187728 5年e 0.97928430 等等。 另一个数据框df2(5行,每个变量1行,每个列3个cols):
df2 <- data.frame(variable=sample(letters[1:5], 5, replace=F),
progr=1:5,
factor=sample(1:3, 5, replace=T))
包含每个这些变量的一些注释/信息。看起来像
df2 variable progr factor
1 b 1 3
2 d 2 3
3 c 3 1
4 e 4 2
5 a 5 2
我想在df1的每一行中添加df2中包含的信息,然后进行一些计算。 首先,我希望df1成为(为每个变量添加的信息):
variable1 progr1 factor1 variable2 progr2 factor2 correlation
1 b 1 3 b 1 3 1
2 b 1 3 c 3 1 0.07478433
3 b 1 3 d 2 3 0.81535674
4 e 4 2 c 3 1 0.79187728
5 a 5 2 e 4 2 0.97928430
然后我的最终结果应该是:
variable1 variable2 correlation same_factor distance
1 b b 1 1 0
2 b c 0.07478433 0 2
3 b d 0.81535674 1 1
4 e c 0.79187728 0 -1
5 a e 0.97928430 1 -1
其中: same_factor是一个虚拟变量,如果variable1和variable2属于同一因子,则取值为1,否则为0 和距离:= progr2-progr1 任何帮助都超过了感激!非常感谢你!
答案 0 :(得分:0)
使用merge
合并数据帧:
out <- merge(x = df1, y = df2, by.x = "variable1", by.y = "variable")
如果要连续合并共享列名称的数据框,则需要将这些列彼此区分开。默认情况是将.x
和.y
添加为后缀,但是您可以使用suffixes
参数指定自己的后缀。在您的示例中,您希望将“ 1”和“ 2”作为后缀(例如progr1
和progr2
),因此我们将在下一个合并中指定它:
out <- merge(x = out, y = df2, by.x = "variable2", by.y = "variable", suffixes = c("1","2"))
ifelse
对于二进制输出很有用:
out$same_factor <- ifelse(as.character(out$variable1) == as.character(out$variable2), 1, 0)
“距离”仅通过减法计算:
out$distance <- out$factor1 - out$factor2