Как создать новый столбец, используя оператор if else, относящийся к двум столбцам из двух разных фреймов данных? - PullRequest
1 голос
/ 22 апреля 2019

У меня есть два кадра данных (df1, df2).Я хотел бы создать новый столбец «Score» в df2, который будет следовать выражению ifelse.

If Else Statement:
If pn1=pn2 & sub1=sub2, then score = 2, 
elseif pn1=pn2 & sub1 IS IN sub2, then score = 1, 
elseif pn=pn, then score = 0,
else score = NA. 
```
    pn1 <- c('12345','12345','13579', '01289','22468')

    sub1 <- c('01','x001','hi-02','bye','12')

    pn2 <- c('12345','12345','13579', '01289','22468','28245')

    sub2 <- c('01','x002','hi-2','b','xyz','23')

    row <-c(1,2,3,4,5,6)

    df1 <- data.frame(pn1,sub1)

    df2 <- data.frame(row,pn2,sub2)

    #Desired Output 
    score <- c(2,1,1,1,0,'NA')

    df2$score <- score
```
For further explanation on the if statement:
Row 1- Score = 2 because PN1 = PN2 and SUB1=SUB2.
Row 2,3,4- Score = 1 because PN1 = PN2 and SUB1 can be found in SUB2.
Row 5- Score = 0 because PN1=PN2.
Row 6- Score = NA because PN2 is not found in df1.

1 Ответ

0 голосов
/ 23 апреля 2019

Я не совсем понимаю ваш вопрос, поскольку размеры двух фреймов данных различны.Кроме того, в вашем примере мне не кажется, что 2-4-й индексы будут оцениваться в 1, так как в этих случаях SUB1 отсутствует в SUB2.Этот ответ основан на том, что вы описываете, что вы хотите, а не на том, что вы показали, что хотите, если это имеет смысл.

df1 <- data.frame(pn1,sub1, stringsAsFactors = FALSE)
df2 <- data.frame(row,pn2,sub2, stringsAsFactors = FALSE)
library(dplyr)
df2$score <- case_when(df2$pn2 == df1$pn1 & df2$sub2 == df1$sub1 ~ 2,
                       df2$pn2 %in% df1$pn1 & df2$sub2 %in% df1$sub1 ~ 1,
                       df2$pn2 %in% df1$pn1 & !(df2$sub2 %in% df1$sub1) ~ 0,
                       !(df2$pn2 %in% df1$pn1) ~ NA_real_)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...