【问题标题】:Adding annotation from one dataframe to each row of another dataframe将注释从一个数据帧添加到另一个数据帧的每一行
【发布时间】:2019-02-06 18:31:23
【问题描述】:

我有数据框 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       variable1 variable2 correlation
    1         b         b           1
    2         b         c        0.07478433
    3         b         d        0.81535674
    4         e         c        0.79187728
    5         a         e        0.97928430

等等。 另一个数据框 df2(5 行,每个变量一个,3 个列):

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 任何帮助都非常感谢!非常感谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      • 2018-02-23
      • 1970-01-01
      相关资源
      最近更新 更多