将注释从一个数据框添加到另一数据框的每一行

时间:2019-02-06 18:31:24

标签: r

我有数据框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 任何帮助都超过了感激!非常感谢你!

1 个答案:

答案 0 :(得分:0)

使用merge合并数据帧:

out <- merge(x = df1, y = df2, by.x = "variable1", by.y = "variable")

如果要连续合并共享列名称的数据框,则需要将这些列彼此区分开。默认情况是将.x.y添加为后缀,但是您可以使用suffixes参数指定自己的后缀。在您的示例中,您希望将“ 1”和“ 2”作为后缀(例如progr1progr2),因此我们将在下一个合并中指定它:

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