簡體   English   中英

將注釋從一個數據框添加到另一數據框的每一行

[英]Adding annotation from one dataframe to each row of another dataframe

我有數據框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行,每個變量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非常感謝您的幫助! 非常感謝你!

使用merge來合並數據幀:

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

如果要連續合並共享列名稱的數據框,則需要將這些列彼此區分開。 缺省情況是將.x.y添加為后綴,但是您可以使用suffixes參數指定自己的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM