【问题标题】:How to combine two Data Frames of different sizes?如何组合两个不同大小的数据框?
【发布时间】:2019-12-26 08:22:36
【问题描述】:

我想合并两个数据框。 这是我的数据框

df1=

id  effectiveDate    value
 1  2019-01-01         0.1
 1  2019-01-02         0.2

df2=

id name
 1   abc

我希望我的最终数据框看起来像 df=

id name  column3
 1  abc  2019-01-01, 2019-01-02, 0.1, 0.2

但我得到的是

df=

id  name effectiveDate value
 1   abc  2019-01-01     0.1
 1   abc  2019-01-02     0.2

【问题讨论】:

  • 请附上您尝试过的代码。
  • 我不知道如何格式化问题
  • 此外,您获得的结果似乎比您打算做的存储数据的方式更好。以你想要的方式,你会丢失信息。
  • 也许aggregate(.~id + name, merge(df1, df2), toString) ?
  • 请包含您的数据的可重现形式(R 格式)。可以用dput(df)...

标签: r dataframe


【解决方案1】:

您可以使用dplyr 来完成它:

library(dplyr)

df2 %>% 
  left_join(df1, by = "id") %>% 
  group_by(id, name) %>% 
  summarise(column3 = paste(toString(effectiveDate), toString(value), sep = ", ")) 

## A tibble: 1 x 3
## Groups:   id [1]
#id name  column3                        
#  <int> <fct> <chr>                          
#1     1 abc   2019-01-01, 2019-01-02, 0.1, 0.2

如果你想避免使用组,你可以这样做:

df2 %>% 
  left_join(df1, by = "id") %>% 
  mutate(column3 = paste(toString(effectiveDate), toString(value), sep = ", ")) %>% 
  select(id, name, column3) %>% 
  distinct()

#  id name                         column3
#1  1  abc 2019-01-01, 2019-01-02, 0.1, 0.2

【讨论】:

  • 它有效,但 column3 对我来说应该是数据框.. 在这种情况下,它说明了它的字符
  • 在您的 OP 中,column3data.frame 中的一列。因此,我不清楚你的预期输出是什么……你能告诉我你的输出到底是什么样子吗?
  • 我的输出应该看起来像你得到它的样子.. 但是 class(column3) 是字符而不是数据框。如果我从输出中打印 colum3 它应该给我数据框
  • 我不知道您对 R 有多熟悉,但您不能将 data.frame 存储在 data.frame 中。您可以将其转换为列表并将 column3 存储为 data.frame。
猜你喜欢
  • 2021-10-02
  • 2018-08-21
  • 2015-02-17
  • 2021-04-02
  • 1970-01-01
  • 2023-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多