首页 > 解决方案 > 根据R中不同数据帧的两个变量的ifelse问题

问题描述

我有两个数据框。第一个 (A) 包含有关 GOALS 的信息,第二个 (B) 包含有关具有该 GOAL 的 ID 的特定信息:

> A
          GOAL
1 A116642173
2 A116642174
3 A116642175
4 A116642176
5 A116642178
6 A116642181 

> B
    ID         GOAL
1 1873 A116433509
2  478 A116642178
3 2165 A116192937
4  165 A116192937
5  313 A116433701
6  475 A116367456

我想根据另一个数据框在其中一个中创建新列。所以,首先我创建了额外的列:

> idkids=c(313,475,165,478,1873,2165)
> ids<-c(idkids)
> A[ ,paste0(ids)]<-0
> A
          GOAL 313 475 165 478 1873 2165
1 A116642173   0   0   0   0    0    0
2 A116642174   0   0   0   0    0    0
3 A116642175   0   0   0   0    0    0
4 A116642176   0   0   0   0    0    0
5 A116642178   0   0   0   0    0    0
6 A116642181   0   0   0   0    0    0 

我试图用它ifelse来查找特定 ID 的目标,但我没有。我试图通过两种方式做到这一点:


for (i in 1:kids){
  A[ ,i+1]<-ifelse(A[ ,i+1]%in%B$ID,"",
                   ifelse(A$GOAL%in%B$GOAL, 1, 0))
}


for (i in 1:kids){
  A[ ,i+1]<-ifelse(A[,i+1]%in%B$ID & A$GOAL%in%B$GOAL,1,0)
}

但是我的代码无法识别特定的 ID,它没有给我 1 (TRUE) 或 0 (FALSE)。它给我所有列的 0... 任何人都可以帮助我吗?

标签: rif-statement

解决方案


这是一种将“B”数据重塑为“宽”然后进行连接的方法

library(dplyr)
library(tidyr)
pivot_wider(B, names_from = ID, values_from = ID, values_fn = length, 
      values_fill = 0) %>% 
   right_join(A)

推荐阅读