【问题标题】:Merging and expanding a column to a dataframe based on row names根据行名将列合并并扩展为数据框
【发布时间】:2014-09-04 14:49:52
【问题描述】:

我有一个带有变量的数据框,该级别出现多次,第二个数据框包含该变量唯一级别的代码。我想在我的数据框中添加一个包含代码的列。最好用一个例子来说明这一点:

f1 <- rep(c("A","B","C"), each = 3)
df1 <- data.frame(f1,v1=runif(9))

  f1         v1
1  A 0.83523506
2  A 0.13833162
3  A 0.15354252
4  B 0.62046499
5  B 0.27823892
6  B 0.04629973
7  C 0.85571269
8  C 0.10963561
9  C 0.70576556

df2 <- data.frame(f1=c("A","B","C"), n1=c("sp1","sp2","sp3") )

  f1  n1
 1  A sp1
 2  B sp2
 3  C sp3

df3 <- data.frame(f1=rep(c("A","B","C"),each = 3),n1=rep(c("sp1","sp2","sp3"),each =3),v1=df1$v1)

  f1  n1         v1
1  A sp1 0.83523506
2  A sp1 0.13833162
3  A sp1 0.15354252
4  B sp2 0.62046499
5  B sp2 0.27823892
6  B sp2 0.04629973
7  C sp3 0.85571269
8  C sp3 0.10963561
9  C sp3 0.70576556

我想找一个函数来获取df3。

【问题讨论】:

    标签: r merge dataframe


    【解决方案1】:

    有很多方法

    使用基函数merge很简单

    merge(df1,df2)
    

    这是另一个使用dplyr

    library(dplyr)
    df1 %>%
      left_join(df2)
    
    #  f1        v1  n1
    #1  A 0.2283936 sp1
    #2  A 0.3709602 sp1
    #3  A 0.2508059 sp1
    #4  B 0.5654418 sp2
    #5  B 0.3206994 sp2
    #6  B 0.2529365 sp2
    #7  C 0.7200121 sp3
    #8  C 0.5247517 sp3
    #9  C 0.1914874 sp3
    

    我的数字与你的不同,因为你没有使用set.seed 来设置随机数生成

    【讨论】:

    • 它似乎有效,但在检查结果后,我注意到由于合并 df 而出现了许多 NA 值。可能是因为要合并的变量的级别不一样?如何充分调平?
    • 好吧,您需要生成一个更长的示例。 dfs 的顺序无关紧要,因为 merge 在工作时会执行排序。您可以尝试 merge(df1,df2,by="f1") 对要合并的变量非常具体。
    • 谢谢,我会努力解决的。我将控制所有变量的名称,以确保没有不匹配。
    猜你喜欢
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 2017-02-24
    • 2021-07-21
    • 1970-01-01
    • 2023-04-05
    • 2019-12-04
    相关资源
    最近更新 更多