R 如何使用关于两个不同数据帧中的两列的if-else语句创建新列?

R 如何使用关于两个不同数据帧中的两列的if-else语句创建新列?,r,R,我有两个数据帧(df1,df2)。我想在df2中创建一个新的“score”列,该列将跟随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','1

我有两个数据帧(df1,df2)。我想在df2中创建一个新的“score”列,该列将跟随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.
If-Else语句:
如果pn1=pn2&sub1=sub2,则得分为2,
否则,如果pn1=pn2&sub1在sub2中,则得分=1,
如果pn=pn,则得分为0,
else分数=NA。
```

pn1我不完全理解你的问题,因为两个数据帧的尺寸不同。此外,在您的示例中,我认为第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_)

df1我不完全理解您的问题,因为两个数据帧的尺寸不同。此外,在您的示例中,我认为第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_)
df1两个问题:1)如何将
df1
中的行与
df2
中的行进行比较?(例如,是否要将
df1
的第1行与
df2
的第1行进行比较,然后将
df1
的第2行与
df2
的第2行进行比较?)2)您对
运算符中的
定义是什么?您似乎在说“x002”中的“x001”的计算结果为true,我不知道哪个运算符为true。两个问题:1)如何将
df1
中的行与
df2
中的行进行比较?(例如,是否要将
df1
的第1行与
df2
的第1行进行比较,然后将
df1
的第2行与
df2
的第2行进行比较?)2)您对
运算符中的
定义是什么?你们似乎在说“x001”在“x002”中的值为真,我不知道对于哪个操作符会是这样。