使用另一个数据框的匹配值向数据框添加新列[重复]

Posted

技术标签:

【中文标题】使用另一个数据框的匹配值向数据框添加新列[重复]【英文标题】:Add a new column to a dataframe using matching values of another dataframe [duplicate] 【发布时间】:2016-08-30 06:37:22 【问题描述】:

我正在尝试用 table2 的匹配 val2 值填充 table1

table1$New_val2 = table2[table2$pid==table1$pid,]$val2

但我收到警告

longer object length is not a multiple of shorter object length

这很公平,因为表格长度不一样。

请指导我正确的方法。

【问题讨论】:

merge(table1, table2, by="pid") 可以根据需要添加all.x=TRUE 参数。 嗨,如果table2中有其他列但我只想添加col2怎么办? merge(table1, table2[, c("pid", "col2")], by="pid") 【参考方案1】:

我不确定你是不是这个意思,但你可能会使用:

newtable <- merge(table1,table2, by  = "pid") 

这将创建一个名为 newtable 的新表,其中包含 3 列和与 id 匹配的值,在本例中为“pid”。

【讨论】:

【参考方案2】:

merge(table1, table2[, c("pid", "val2")], by="pid")

添加 all.x=TRUE 参数以保留 table1 中所有在 table2 中没有匹配项的 pid...

你走在正确的轨道上。这是一种使用匹配的方法...

table1$val2 &lt;- table2$val2[match(table1$pid, table2$pid)]

【讨论】:

【参考方案3】:

我来晚了,但万一其他人问同样的问题: 这正是 dplyr 的 inner_merge 所做的。

table1.df <- dplyr::inner_join(table1, table2, by=pid)

by-command 指定应使用哪一列来匹配行。

编辑:我曾经很难记住它是 [join],而不是 [merge]。

【讨论】:

我更喜欢这个而不是merge(),因为在这个过程中表格没有被打乱,尽管这个函数现在被称为dplyr::inner_join() pid 现在也需要在 "" 中 - 即 table1.df

以上是关于使用另一个数据框的匹配值向数据框添加新列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在数据框的列之间插入新列[重复]

将来自一个数据框的值合并到 Pandas 中的新列中[重复]

pandas:根据相同数据框的日期时间索引查找添加新列

如何根据另一个数据框更改数据框的元素?

向 pyspark 中的数据框添加列

在附属机构中查找城市名称,并将它们与其对应的国家/地区添加到数据框的新列中