【问题标题】:Merging data frames with dataframe source as column [closed]将数据框与数据框源合并为列[关闭]
【发布时间】:2017-08-23 19:20:47
【问题描述】:

我有两个数据框

df1

##   day time  temp activ
## 1 346  840 36.33     0
## 2 346  850 36.34     0
## 3 346  900 36.35     0
## 4 346  910 36.42     0
## 5 346  920 36.55     0
## 6 346  930 36.69     0

还有 df2

  day time  temp activ
   1 307  930 36.58     0
## 2 307  940 36.73     0
## 3 307  950 36.93     0
## 4 307 1000 37.15     0
## 5 307 1010 37.23     0
## 6 307 1020 37.24     0

我在创建另一列时遇到问题,该列列出了该行来自哪个数据帧(df1 或 df2),因此合并后的 df 看起来像这样,分别用于 df1/df2 数据。

    day time  temp activ df_origin
1   307  930 36.58     0 df1
2   307  940 36.73     0 df1
3   307  950 36.93     0 df1
4   307 1000 37.15     0 df1

【问题讨论】:

  • 307 930 36.58 0 这来自df2 但你在你的期望输出中说df1?怎么样?
  • 但是“合并”不是意味着每一行中的值都来自两个数据框吗?你的意思是rbind 而不是merge
  • 合并的 df (df3) 包含 df1 的值,但在这个例子中我只打印了前 5 行。我使用的合并函数是 merge(df1, df2, all = TRUE)跨度>

标签: r dataframe merge unique


【解决方案1】:

在合并之前,只需为每个列添加一列:

df1$df_origin <- 'df1'
df2$df_origin <- 'df2'

【讨论】:

  • 谢谢!我试图弄乱 merge() 函数以便输入它,但这要简单得多。
【解决方案2】:

我们可以将数据集放在list 中并使用Map 立即创建列

lst <- mget(paste0("df", 1:2))
lst <- Map(cbind, lst, df_origin = names(lst))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 2015-08-16
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    相关资源
    最近更新 更多