[英]Comparing each row of one dataframe with a row in another dataframe using R
[英]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”作為后綴(例如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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.