看起来您在这里进行了一些合并,并优先考虑数据框 2 中“项目”的值。
试试下面的代码,它使用dplyr 包和left_join() 和full_join()。
正在加载数据...
df1 <- read.table(header=TRUE, stringsAsFactors = FALSE, text=
'ID Name Status Items
16 Amy_B Closed 100
10 Erik_C Closed 80
14 Paul_R Closed 20
17 Chris_K Closed 40
19 Ali_I Closed 60
22 Jenny_A Closed 40')
df2 <- read.table(header = TRUE, stringsAsFactors = FALSE, text =
"ID Name Items
14 Paul_R 10
14 Sarah_K 10
22 Jenny_A 30
22 Brian_L 10")
合并表格
# add the status column to df2
df <- left_join(df2, df1 %>% select(ID, Status), by = 'ID')
# ID Name Items Status
# 14 Paul_R 10 Closed
# 14 Sarah_K 10 Closed
# 22 Jenny_A 30 Closed
# 22 Brian_L 10 Closed
# combine both data frames by merging for both ID and Name
df <- full_join(df, df1,
by = c('ID', 'Name', 'Status'),
suffix = c('.1', '.2'))
# ID Name Items.1 Status Items.2
# 14 Paul_R 10 Closed 20
# 14 Sarah_K 10 Closed NA
# 22 Jenny_A 30 Closed 40
# 22 Brian_L 10 Closed NA
# 16 Amy_B NA Closed 100
# 10 Erik_C NA Closed 80
# 17 Chris_K NA Closed 40
# 19 Ali_I NA Closed 60
# create a new column which selects the df2 value if that exists, otherwise uses df1 value
df <- df %>%
mutate(Items = ifelse(is.na(Items.1), Items.2, Items.1)) %>%
select(-Items.1, -Items.2)
# ID Name Status Items
# 14 Paul_R Closed 10
# 14 Sarah_K Closed 10
# 22 Jenny_A Closed 30
# 22 Brian_L Closed 10
# 16 Amy_B Closed 100
# 10 Erik_C Closed 80
# 17 Chris_K Closed 40
# 19 Ali_I Closed 60
把它们放在一起......
left_join(df2, df1 %>% select(ID, Status), by = 'ID') %>%
full_join(df1,
by = c('ID', 'Name', 'Status'),
suffix = c('.1', '.2')) %>%
mutate(Items = ifelse(is.na(Items.1), Items.2, Items.)) %>%
select(-Items.1, -Items.2)
给出下表作为输出:
ID Name Status Items
14 Paul_R Closed 10
14 Sarah_K Closed 10
22 Jenny_A Closed 30
22 Brian_L Closed 10
16 Amy_B Closed 100
10 Erik_C Closed 80
17 Chris_K Closed 40
19 Ali_I Closed 60