R-如果在另一个数据框上找到ID,则合并和替换列

时间:2018-07-02 22:25:54

标签: r if-statement merge

我有以下两个数据框,并且正在尝试改进代码,因此如果from setuptools import setup setup( name='my_dependency', version='VERSION', description='...', author='...', url='https://...', license='MIT', install_requires=[ 'numpy', ], zip_safe=False, ) 中的letters列与df1中的letters列相匹配, 。

df2

这就像一行执行以下操作一样:

df1 <- data.frame(ID = c(1,3,2,4,5), Letters = LETTERS[1:5], stringsAsFactors = F)
df2 <- data.frame(ID = c(1,3,4), Letters2 = "F", stringsAsFactors = F)

desired:
ID  letters
1   F
2   B
3   F
4   D
5   F

2 个答案:

答案 0 :(得分:1)

尝试一下:

library(tidyverse)
df1%>%
   left_join(df2)%>%
   mutate(Letters=coalesce(letters2,Letters),letters2=NULL)
Joining, by = "ID"
  ID Letters
1  1       F
2  2       B
3  3       F
4  4       F
5  5       E

答案 1 :(得分:0)

我们可以使用数字“ ID”作为索引,以将“字母”中的值更改为“字母2”(均为“ F”)的值

df1$Letters[df2$ID] <- df2$letters2
df1
#  ID Letters
#1  1       F
#2  2       B
#3  3       F
#4  4       F
#5  5       E

或使用data.table

library(data.table)
setDT(df1)[df2, Letters := Letters2, on = .(ID)]
df1
#   ID Letters
#1:  1       F
#2:  3       F
#3:  2       C
#4:  4       F
#5:  5       E