【问题标题】:Replacing elements in a dataframe not contained in a vector替换向量中不包含的数据框中的元素
【发布时间】:2018-03-12 23:00:25
【问题描述】:

简单的问题,但我找不到解决方案:如何用特定字符串替换数据框中不包含在向量中的所有元素?

我的数据框如下所示:

ID <- sample(1:8)
Country <- c("USA", "RUS", "Unknown", "Not specified", "???", "XXX", "FRA", "ITA")
myDF <- data.frame(ID, Country)

我还有一个包含所有可能的国家代码的向量:

countryCodes <- c("ESP", "FRA", "ITA", "GBR", "DEU", "USA", "RUS", "BRA", "KOR", "BLZ", "BLR", "BEL", "TWN", "CHN")

我想将 myDF$Country 中未包含在 countryCodes 中的所有元素替换为“N/D”。

我正在使用的数据集大约有 3000 万行,我必须执行多次转换,因此我希望代码尽可能简单和快速。

提前致谢!

【问题讨论】:

  • myDF[!(myDF$Country %in% countryCodes), "Country"] &lt;- "N/D"。此外,对于处理大型数据集,我建议使用(和学习)data.table 包。
  • @AndreyKolyadin 把它写成答案?
  • 成功了,谢谢!

标签: r data-munging


【解决方案1】:

对于该数据大小和操作,我会使用 data.table 包:

library(data.table)
setDT(myDF)             # convert to data.table
myDF[!J(countryCodes), on = "Country", Country := "N/D"]
setDF(myDF)             # ..optional, to convert back to data.frame

这使用了一个非常有效的连接和引用更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 2016-08-16
    • 2020-08-29
    • 1970-01-01
    相关资源
    最近更新 更多