这个问题在这里已有答案:
我试着找出这个问题的答案但没有运气 . 我在R中有两个数据框(df1和df2),除了两列,一个人数字(pnr)和一个药物名称(名称)之外,有两个不同的信息 . 在df1中行的行,我想检查,如果pnr和name的组合存在于df2中的某处 . 如果存在这种组合,我想在df1的另一列中显示“是” . 如果不是“不” .
df1
pnr|drug|...|check
---|----|---|-----
1 | 1 |...| no
1 | 2 |...| yes
2 | 2 |...| yes
3 | 2 |...| no
.....
df2
pnr|drug|...|
---|----|---|
1 | 2 |...|
2 | 2 |...|
....
例如,我想检查,如果行组合pnr = 1&drug = 1存在于df2(否),pnr = 1&drug = 2(是)等等,然后在其中放置“是”或“否”检查df1中的列
我没有运气就试过以下 for
声明 . 它确实放置了一个"yes or " no " in the " check“列,但它没有正确执行
for(index in 1:nrow(df1)){
if((df1[index,]$pnr %in% df2$pnr)&(df1[index,]$name %in% df2$name)){
check_text="yes"}else{check_text="no"}
df1$check=check_text
}
我有一种感觉,我应该使用 apply
,但我无法弄明白 . 你们有没有想法,如何解决这个问题?`
真诚的再见
3 回答
一种方法是使用
base R
方法 .将列
pnr
和drug
粘贴在一起并在df1
中找到类似的match
我们可以使用
apply
,使用any
函数检查匹配:数据
这对于
dplyr::left_join
来说很自然: