首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据两个数据帧的值相等创建变量

根据两个数据帧的值相等创建变量
EN

Stack Overflow用户
提问于 2019-02-03 20:51:23
回答 1查看 49关注 0票数 2

我有以下两个数据框架:

代码语言:javascript
复制
df1 <- data.frame(ID = c('hds23','has21','her10','hds21','hss23','has23'))

df2 <- data.frame(ID = c('hds23','her10','hds21'))

我想要做的是,在df2df1中的所有I都在df1$Status中的一个新变量中标记为'TA‘,其他所有I都标记为"NoTA“。

我尝试过ifelse(),但是它提供了以下错误:

代码语言:javascript
复制
Warning message:
In LACoursesTable1$YearCourseSec == CourseTable$YearCourseSec :
longer object length is not a multiple of shorter object length

这就是我希望df1看起来的样子

代码语言:javascript
复制
ID       Status
hds23    TA
has21    NTA
her10    TA
hds21    TA
hss23    NTA
has23    NTA
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-03 23:42:27

以下是使用一些整洁功能的两种方法:

代码语言:javascript
复制
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用于缺少项),它们在行中绑定在一起。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54507461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档