我有以下两个数据框架:
df1 <- data.frame(ID = c('hds23','has21','her10','hds21','hss23','has23'))
df2 <- data.frame(ID = c('hds23','her10','hds21'))我想要做的是,在df2中df1中的所有I都在df1$Status中的一个新变量中标记为'TA‘,其他所有I都标记为"NoTA“。
我尝试过ifelse(),但是它提供了以下错误:
Warning message:
In LACoursesTable1$YearCourseSec == CourseTable$YearCourseSec :
longer object length is not a multiple of shorter object length这就是我希望df1看起来的样子
ID Status
hds23 TA
has21 NTA
her10 TA
hds21 TA
hss23 NTA
has23 NTA发布于 2019-02-03 23:42:27
以下是使用一些整洁功能的两种方法:
library(tidyverse)
df1 <- data.frame(
ID = c('hds23','has21','her10','hds21','hss23','has23')
)
df2 <- data.frame(
ID = c('hds23','her10','hds21')
)
df1 <- df1 %>%
mutate(
Status = if_else(
ID %in% df2$ID,
'TA',
'noTA'
)
)
df1 <- df1 %>%
semi_join(df2, by = 'ID') %>%
mutate(Status = 'TA') %>%
bind_rows(
df1 %>%
anti_join(df2, by = 'ID') %>%
mutate(Status = 'noTA')
)
> df1
ID Status
1 hds23 TA
2 her10 TA
3 hds21 TA
4 has21 noTA
5 hss23 noTA
6 has23 noTA
> 第一种方法使用一个条件if_else(<cond>, <true>, <false>),而第二种方法使用两个单独的联接(semi_join用于匹配项,anti_join用于缺少项),它们在行中绑定在一起。
https://stackoverflow.com/questions/54507461
复制相似问题