我有 2 个包含不同信息的数据框(两个数据框中只有 1 列相同:subject
)。此外,其中一个数据帧比另一个长(更多列和更多行)。
所以,我有这样的东西:
# drataframe 1
subject var1 var2
101 A B
102 C D
103 E F
...
# dataframe 2
subject varW varX varY varZ
101 1 2 1 4
101 2 1 1 4
101 4 1 1 4
102 2 1 2 5
102 1 1 2 5
102 2 4 2 5
103 2 3 3 1
103 1 2 3 1
103 4 1 3 1
请注意,每个主题在数据帧 2 中重复多次,而在数据帧 1 中,每个主题只出现一次。
我想要做的是将列 varY
和 varZ
附加到数据帧 1。
我尝试使用 select
(选择这两列)然后使用 inner_join
(连接两个数据框)。但是,我为每个主题得到 3 行,因为每个主题在数据帧 2 中重复了 3 次。我希望数据帧 1 中的每个主题在加入后只有 1 行,因为 varY< 中只有一个值
和 varZ
每个主题。
换句话说,这将是我想要的输出:
subject var1 var2 varY varZ
101 A B 1 4
102 C D 2 5
103 E F 3 1
最佳答案
使用库(data.table)
df1[df2[, .SD[1], .SDcols=c("varY", "varZ"), by=subject], on="subject"]
或者(@thelatemail 的评论),
df2[, .(subject, varY, varZ)][df1, on=.(subject), mult="first"]
数据:
df1 = fread("
subject var1 var2
101 A B
102 C D
103 E F
")
df2 = fread("
subject varW varX varY varZ
101 1 2 1 4
101 2 1 1 4
101 4 1 1 4
102 2 1 2 5
102 1 1 2 5
102 2 4 2 5
103 2 3 3 1
103 1 2 3 1
103 4 1 3 1
")
关于r - 从另一个更长的数据帧向 R 数据帧添加新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67187846/