【问题标题】:Substitute DT1.x with DT2.y when DT1.x and DT2.x match in R [duplicate]当 DT1.x 和 DT2.x 在 R 中匹配时,用 DT2.y 替换 DT1.x [重复]
【发布时间】:2017-07-24 01:19:59
【问题描述】:

我想使用 R 中的数据表来做到这一点。

所以我从这个开始

     dtMain
           Name      state
    1: CompanyC         CA
    2: CompanyM         MN
    3: CompanyC1 California
    4: CompanyT         TX

     statesFile
       stateExpan state
    1:      Texas    TX
    2:  Minnesota    MN
    3: California    CA

dtMain$State == statesFile$state的地方,我想用statesFile$stateExpan替换dtMain$State 并得到这个

      dtMain
           Name      state
    1: CompanyA California
    2: CompanyB  Minnesota
    3: CompanyC California
    4: CompanyD      Texas

这是创建 2 个文件的代码

library(data.table)
dtMain <- data.table(Name  = c("CompanyA"  ,"CompanyB","CompanyC","CompanyD"),
                 state = c("CA","MN","California","TX"))
statesFile <- data.table( stateExpan = c("Texas","Minnesota","California"),
                          state = c("TX","MN","CA"))

我的问题是这个的下一个级别 R finding rows of a data frame where certain columns match those of another 我正在寻找数据表解决方案。

【问题讨论】:

  • 你应该用文字来解释转换的规则,而不是简单地显示输入和输出
  • @ytk 我认为这不是骗人的,因为这是关于修改 dtMain,而不是合并以创建新表。
  • 反正答案是dtMain[statesFile, on=.(state), state := i.stateExpan ]我看看能不能找到更合适的骗子。您还可以查看用户编写的示例:stackoverflow.com/documentation/data.table/4976/…
  • 谢谢这回答了我的问题。我正在使用 dtMain[statesFile$state, state := statesFile$stateExpan] 可以工作但会破坏原始 dt 顺序。
  • 是的,通常最好避免在 data.tables 中使用 $,因为它不需要并且会造成混乱。

标签: r data.table


【解决方案1】:

使用更新连接:

dtMain[statesFile, on=.(state), state := i.stateExpan ]

i.* 前缀表示它来自x[i, on=, j] 中的i 表。这里是可选的。

详情请见?data.table

【讨论】:

  • 我找不到骗子,所以发布...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-29
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 2011-02-26
相关资源
最近更新 更多