Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.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,如果匹配DF1$group=DF2$group,我想用DF1$Value查找并替换DF1$Value中的值 DF1 group Value 12357 ABC D 12575 GHI JK 19718 LMN O 19716 LMN OP 18947 QR S TV DF2 group Value 12357 ABCD 12575 GHIJK 19718 LMNO 18947 QR

如果匹配DF1$group=DF2$group,我想用DF1$Value查找并替换DF1$Value中的值

DF1
group       Value
12357      ABC D
12575      GHI JK
19718      LMN O
19716      LMN OP
18947      QR S TV

DF2
group       Value
12357      ABCD
12575      GHIJK
19718      LMNO
18947      QR STV
我怎样用R写这句话?
提前感谢

这里有一个使用
dplyr
包的解决方案,您可能需要将值列从因子转换为字符

library(dplyr)
DF1$Value <- as.character(DF1$Value)
DF2$Value <- as.character(DF2$Value)
merge(DF1, DF2, by = "group", all.x = T) %>% 
      mutate(Value = ifelse(!is.na(Value.y), Value.y, Value.x)) %>% 
      select(group, Value)

  group        Value
1 12357         ABCD
2 12575        GHIJK
3 18947       QR STV
4 19716       LMN OP
5 19718         LMNO
库(dplyr)
DF1美元价值%
选择(组、值)
组值
112357 ABCD
212575吉吉克
3 18947 QR STV
419716 LMN OP
519718 LMNO

这是一个带有
dplyr
包的解决方案,您可能需要将值列从因子转换为字符

library(dplyr)
DF1$Value <- as.character(DF1$Value)
DF2$Value <- as.character(DF2$Value)
merge(DF1, DF2, by = "group", all.x = T) %>% 
      mutate(Value = ifelse(!is.na(Value.y), Value.y, Value.x)) %>% 
      select(group, Value)

  group        Value
1 12357         ABCD
2 12575        GHIJK
3 18947       QR STV
4 19716       LMN OP
5 19718         LMNO
库(dplyr)
DF1美元价值%
选择(组、值)
组值
112357 ABCD
212575吉吉克
3 18947 QR STV
419716 LMN OP
519718 LMNO

这里有一个
基本R
选项,带有
匹配

 i1 <- with(DF1, match(group, DF2$group))
 DF1$Value <- with(DF1, ifelse(is.na(i1), Value, DF2$Value[i1]))
 DF1
 #  group  Value
 #1 12357   ABCD
 #2 12575  GHIJK
 #3 19718   LMNO
 #4 19716 LMN OP
 #5 18947 QR STV

i1这里有一个
base R
选项,带有
match

 i1 <- with(DF1, match(group, DF2$group))
 DF1$Value <- with(DF1, ifelse(is.na(i1), Value, DF2$Value[i1]))
 DF1
 #  group  Value
 #1 12357   ABCD
 #2 12575  GHIJK
 #3 19718   LMNO
 #4 19716 LMN OP
 #5 18947 QR STV

i1这里有一个使用
merge
的基本解决方案:

transform(merge(df1,df2, by='group', all.x=TRUE), 
          Value = ifelse(is.na(Value.y), Value.x, Value.y)
)[c('group','Value')]
##   group  Value
## 1 12357   ABCD
## 2 12575  GHIJK
## 3 18947 QR STV
## 4 19716 LMN OP
## 5 19718   LMNO
这假设您在
df1
df2
中有
character
值。否则,您需要将
Value.x
Value.y
包装为
as.character

... ifelse(is.na(Value.y), as.character(Value.x), as.character(Value.y)) ...

下面是一个使用
merge
的基本解决方案:

transform(merge(df1,df2, by='group', all.x=TRUE), 
          Value = ifelse(is.na(Value.y), Value.x, Value.y)
)[c('group','Value')]
##   group  Value
## 1 12357   ABCD
## 2 12575  GHIJK
## 3 18947 QR STV
## 4 19716 LMN OP
## 5 19718   LMNO
这假设您在
df1
df2
中有
character
值。否则,您需要将
Value.x
Value.y
包装为
as.character

... ifelse(is.na(Value.y), as.character(Value.x), as.character(Value.y)) ...

当然还有一个
data.table
解决方案

library(data.table)

setDT(DF1)
setDT(DF2)

DF1[ DF2, on = c("group"), Value := i.Value]
## here the 'Value' of DF1 is being updated with the 'Value' of DF2
## where there is a common 'group' value between the two tables.    

DF1
   group  Value
1: 12357   ABCD
2: 12575  GHIJK
3: 19718   LMNO
4: 19716 LMN OP
5: 18947 QR STV

当然还有一个
data.table
解决方案

library(data.table)

setDT(DF1)
setDT(DF2)

DF1[ DF2, on = c("group"), Value := i.Value]
## here the 'Value' of DF1 is being updated with the 'Value' of DF2
## where there is a common 'group' value between the two tables.    

DF1
   group  Value
1: 12357   ABCD
2: 12575  GHIJK
3: 19718   LMNO
4: 19716 LMN OP
5: 18947 QR STV