r - 从另一个更长的数据帧向 R 数据帧添加新列

标签 r dataframe

我有 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 中,每个主题只出现一次。

我想要做的是将列 varYvarZ 附加到数据帧 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/

相关文章:

r - R-Server或Shiny Server是否为每个用户创建一个新的R进程/实例?

实时股价 R

scala - 如何在scala中将元组列表转换为数据框

python - 检查每列中特定值的唯一性

python - Pandas :通过将两列的数字组合为字符串来创建新列

r - 每个面都有自己的图例,但颜色映射一致

r - 如何使用SparkR读写ElasticSearch?

r - R中的部分颜色直方图

python - 如何简化代码以检查 pandas 中的范围

scala - 检查特定标识符是否存在于其他数据框中