r - 如何根据变量是否出现在另一个数据框中在 R 中创建另一列

标签 r

我有两个看起来与此类似的数据框:

>health
   ID Stroke Diab MI Age Sex
1   1      0    0  0  65   M
2   2      0    0  0  66   M
3   3      1    0  0  78   F
4   4      0    0  0  55   M
5   5      0    0  0  67   M
6   6      1    1  1  66   M
7   7      0    0  0  79   F
8   8      0    0  0  54   M
9   9      0    0  0  65   F
10 10      1    1  1  78   F

>Asthma
   ID Smoker Smoking_Status
1  12      2              0
2  15      0              1
3  24      1              0
4   2      2              1
5   8      2              0
6  53      1              1
7  10      0              0
8  32      0              0
9   1      0              0
10  5      1              1

这些是我用来生成这些示例表的代码

health <- data.frame(ID=c(1,2,3,4,5,6,7,8,9,10), Stroke = factor(c(0,0,1,0,0,1,0,0,0,1)), 
                     Diab = factor(c(0,0,0,0,0,1,0,0,0,1)), MI = factor(c(0,0,0,0,0,1,0,0,0,1)),
                     Age = factor(c(65,66,78,55,67,66,79,54,65,78)), 
                     Sex = factor(c("M","M","F","M","M","M","F","M","F","F")))

Asthma <- data.frame(ID=c(12,15,24,2,8,53,10,32,1,5), Smoker = factor(c(2,0,1,2,2,1,0,0,0,1)), 
                     Smoking_Status = factor(c(0,1,0,1,0,1,0,0,0,1)))

我的问题是如何在健康数据框中生成另一列,为另一列赋予值 1 以显示该 ID 是否出现在哮喘数据框中。

这是我的预期结果:

   ID Asthma  Stroke Diab MI Age Sex
1   1    1     0      0   0   65   M
2   2    1     0      0   0   66   M
3   3    0     1      0   0   78   F
4   4    0     0      0   0   55   M
5   5    1     0      0   0   67   M
6   6    0     1      1   1   66   M
7   7    0     0      0   0   79   F
8   8    0     0      0   0   54   M
9   9    0     0      0   0   65   F
10 10    1     1      1   1   78   F

最佳答案

许多可能的方法之一:

health$asthma =match(x = health$ID,table = Asthma$ID,nomatch = 0)
health$asthma = replace(x = health$asthma,list = which(health$asthma>0),values = 1)

使用data.table:

health = as.data.table(x = health)
Asthma = as.data.table(x = Asthma)
health[,`:=`(asthma = numeric(nrow(health)))]
set(x = health,i = which(health$ID %in% Asthma$ID),j = "asthma",value = 1)


#> health
#    ID Stroke Diab MI Age Sex asthma
# 1:  1      0    0  0  65   M    1
# 2:  2      0    0  0  66   M    1
# 3:  3      1    0  0  78   F    0
# 4:  4      0    0  0  55   M    0
# 5:  5      0    0  0  67   M    1
# 6:  6      1    1  1  66   M    0
# 7:  7      0    0  0  79   F    0
# 8:  8      0    0  0  54   M    1
# 9:  9      0    0  0  65   F    0
#10: 10      1    1  1  78   F    1

关于r - 如何根据变量是否出现在另一个数据框中在 R 中创建另一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55633143/

相关文章:

r - 使用循环的子集数据帧

r - 如何从 R 读取 PDF 元数据

r - 在 data.table 的 j 参数中使用 "list"

r - 根据列条件对数据框进行排序

r - 如何为不同级别指定不同的颜色范围?

R:将数据帧分为 3 部分

r - 加速 R 代码以基于其他数据帧用字符串填充向量

r - 计算不同列中 2 个值的出现次数

r - 将 4 个列表保存为 1 个列表中的子列表元素

r - dplyr 过滤列是否以列表中的字符串之一开头