r - 如何使用关于来自两个不同数据帧的两列的 if else 语句创建新列?
问题描述
我有两个数据框(df1,df2)。我想在 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.
解决方案
我不完全理解您的问题,因为两个数据框的尺寸不同。此外,在您的示例中,在我看来,第 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_)
推荐阅读
- python - 这里有没有人尝试在 Python 上对 Scytale Cipher 进行编码和解码?
- linux - Stat 命令将具有更改日期的文件列入候选名单
- assembly - RISC-V程序计算4个数字的算术平均值
- git - 克隆 repo 时符号链接变成文本文件
- ruby-on-rails - 从主表中获取 id 和名称 - Ruby
- python - 我将如何继续从群组中仅抓取在线电报成员?
- java - 为 imageview 图像添加淡入效果 [Android]
- java - 从二进制字符串中查找可能的对
- javascript - Chrome扩展,如果重复标签阻止点击元素
- python - pandas to_sql() 替换表但保留列名