【问题标题】:R - Match two columns in two dataframesR - 匹配两个数据框中的两列
【发布时间】:2020-05-24 20:11:10
【问题描述】:

我正在尝试操作满足某些条件的数据框。

有主数据框df1:

Title             Artist        Warner    Sony    Universal
Break My Heart    Dua Lipa      0         0       0
Daisies           Katy Perry    0         0       1
Nicotine          Chef`Special  1         1       0
... 1 000 000+ rows

df2:

Label       Title            Artist        Operation
Warner      Nicotine         Chef`Special  0
Sony        Break my Heart   Dua Lipa      1
... 100+ rows

Df1 包含一些错误。在这种情况下,尼古丁的 Warner 值为 1,而它应该为 0。我希望匹配两个数据帧中的 Title 和 Artist,然后根据 df2 将标签值更改为 1 或 0。

在这种情况下,它应该看到 Chef'Special 的尼古丁在 df1 和 df2 中,它应该将 df1$Warner 更改为 0。Dua Lipa 的 Break My Heart 应该使用相同的方法将 df1$Sony 设置为 1。

我一直在考虑如何解决这个问题,但我完全不知所措。

【问题讨论】:

  • 如何确定哪个df的列值正确?
  • 嗨,马特,df2 用于纠正 df1 中的错误。因此 df1 中的曲目可能会将 df1$Warner 设置为 1 而它应该是 0。 Df2 将包含一个条目,而 df2$Operation 包含它应该是的值。所以 df2 具有正确的列值。如果 df2 的结构如下所示会更容易:``` Title Artist Warner Sony Universal Nicotine Chef'Special 0 1 0 .... ``

标签: r


【解决方案1】:

这是一个使用合并的选项,没有你的数据所以以mtcars为例:

df1 = head(mtcars, 5)
df2 = subset(head(within(df1,mpg <-  mpg * 2),2), select = "mpg")


df3 <- merge(df1, df2, by = 0, all.x = TRUE)
df3 <- within(df3, mpg <- ifelse(is.na(mpg.y), 
                              mpg.x, mpg.y))[-(2:3)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 2018-10-23
    相关资源
    最近更新 更多