Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 匹配另一列中的值后替换一列中的值_R - Fatal编程技术网

R 匹配另一列中的值后替换一列中的值

R 匹配另一列中的值后替换一列中的值,r,R,我的数据看起来像这样。我现在要做的是使用第二个表中的匹配值替换“旧ID”值:第一个表是 Old ID | Usage 211 25 211 17 211 18 202 11 202 12 194 17

我的数据看起来像这样。我现在要做的是使用第二个表中的匹配值替换“旧ID”值:第一个表是

      Old ID |   Usage 
       211         25          
       211         17          
       211         18         
       202         11          
       202         12          
       194         17          
       202         16          
       194         22          
       194         84          
       198         26         
具有匹配值的第二个表

      Old ID |     ID 
       211         abf          
       202         rdg          
       194         ufe         
       198                   
将旧ID中的每个值替换为第二个表中的相应值后,应更改第一个表。如果ID列中的值缺失或为“NULL”,则第一个表中替换的值应显示为“N/A”。第一个表现在应如下所示

      Old ID |   Usage 
       abf         25          
       abf         17          
       abf         18         
       rdg         11          
       rdg         12          
       ufe         17          
       rdg         16          
       ufe         22          
       ufe         84          
       n/a         26   
我有大约200万这样的作品。非常感谢您的帮助

像这样的事情

df1 <- data.frame(old.id = c(211, 211, 211, 202, 194, 202, 198, 194), usage=c(20:27), stringsAsFactors = F)
df2 <- data.frame(old.id = c(211, 211, 212, 213, 202, 198), ID =  c("a", "a", "b", "c", "d", "e"), stringsAsFactors = F)


df1$old.id <- sapply(df1$old.id , (function(nm) { out <- df2[df2$old.id == nm, ]$ID; ifelse(length(out) > 0, out[1], NA) }))

df1    

df1首先合并两个表,然后删除重复项,如下所示:

  S=merge(df1,df2,by="Old_ID")
  S[!duplicated(S),c(3,2)]
      ID Usage
 1   ufe    17
 4   ufe    22
 7   ufe    84
 10 <NA>    26
 11  rdg    11
 14  rdg    12
 17  rdg    16
 20  abf    25
 23  abf    17
 26  abf    18
S=merge(df1,df2,by=“Old\u ID”)
S[!重复,c(3,2)]
ID使用
1 ufe 17
4 ufe 22
7 ufe 84
10     26
11 rdg 11
14 rdg 12
17 rdg 16
20 abf 25
23 abf 17
26 abf 18

这可以通过加入时的更新来解决:

资料
DT1这基本上只是一个合并-
merge(df1,unique(df2),by=“OldID”,all.x=TRUE)
df1$OldID可能重复Hey Onyanbu,我在发布问题时犯了一个错误。第二个表的条目数与第一个表的条目数不同。第二个是为了匹配旧ID和ID。我已经编辑了这个问题。解决方案可能不同,但代码仍然保持不变
library(data.table)
setDT(DT1)[setDT(DT2), on = "Old_ID", Old_ID := ID][]
    Old_ID Usage
 1:    abf    25
 2:    abf    17
 3:    abf    18
 4:    rdg    11
 5:    rdg    12
 6:    ufe    17
 7:    rdg    16
 8:    ufe    22
 9:    ufe    84
10:     NA    26
DT1 <- structure(list(Old_ID = c("abf", "abf", "abf", "rdg", "rdg", 
"ufe", "rdg", "ufe", "ufe", NA), Usage = c("25", "17", "18", 
"11", "12", "17", "16", "22", "84", "26")), .Names = c("Old_ID", 
"Usage"), row.names = c(NA, -10L), class = c("data.table", "data.frame"))

DT2 <- structure(list(Old_ID = c("211", "202", "194", "198"), ID = c("abf", 
"rdg", "ufe", NA)), .Names = c("Old_ID", "ID"), row.names = c(NA, 
-4L), class = c("data.table", "data.frame"))