合并数据框时如何避免重复值?
Posted
技术标签:
【中文标题】合并数据框时如何避免重复值?【英文标题】:How to avoid repeating values when merging data frames? 【发布时间】:2021-09-06 04:51:25 【问题描述】:我有两个数据框:
df1:
Year Name1 Value1
1 1967 Fallow 47.2730
2 1967 Cultivated 52.5090
3 1967 Grassland 57.5399
4 1967 Shrubland 61.3711
5 1967 Woodland 62.1911
6 1960 Fallow-w 42.2146
and df2:
Year Name2 Value2
1 1967 Fallow 47.2718
2 1967 Cultivated 52.4988
3 1967 Grassland 56.8066
4 1967 Shrubland 59.3636
5 1967 Woodland 56.3803
6 1967 Fallow-w 42.1898
我想合并两个 dfs,除了值之外它们是相同的。我这样做了:
df_all = merge(df1, df2, by = 'Year')
但它只保留一帧的重复行值并像这样结束:
Year Name1 Value1 Name2 Value2
1 1967 Fallow 47.273 Fallow 47.2718
2 1967 Fallow 47.273 Cultivated 52.4988
3 1967 Fallow 47.273 Grassland 56.8066
4 1967 Fallow 47.273 Shrubland 59.3636
5 1967 Fallow 47.273 Woodland 56.3803
6 1967 Fallow 47.273 Fallow-w 42.1898
我做错了什么?
【问题讨论】:
如果您的意思是不想重复名称列但确实想要两个值列然后merge(df1, df2, by = 1:2)
这也有效!谢谢!!
【参考方案1】:
如果我正确理解您的问题,我认为您需要加入:
left_join(df1, df2, by = c('Year', 'Name1'= 'Name2'))
这将匹配Year
和Name
的值。您的合并本质上只是在 Year
而不是名称上进行连接,这就是它在右侧复制这些列的原因。
【讨论】:
【参考方案2】:如果除了你可以尝试的值之外,两个 df 完全相同:
df_all=merge(df1, df2, by=c("Year","Name"))
请注意,如果 Name1 和 Name2 具有相同的名称(上面的名称)会更容易。
【讨论】:
以上是关于合并数据框时如何避免重复值?的主要内容,如果未能解决你的问题,请参考以下文章
ExtJS 4 - 当列编辑器是组合框时如何避免网格列值变为空?