在一个变量上使用循环将第二个变量的值保留在R中的第三个变量中

时间:2018-09-05 20:58:57

标签: r

我有一个带有诊断代码(dx#)和在记录的入院前是否存在该诊断的注释(dx#poa)的数据框

例如dx1=443dx1poa =="Y"表示dx1在准入之前存在。

我想做的是遍历每个观察值,如果dx#poa=="Y",那么我想将dx#的值保留在另一个变量com1中,否则设置com#==""或{ {1}}

下面是一个带有4个观察值的样本数据框,用于模拟我正在处理的较大数据集。

com#==NA

开始

pt<-c(1,2,3,4)
dx1<-c(443, 5521, 6647, 812)
dx2<-c(453, 5431, 779, 6782)
dx1poa <-c("Y","N","N","N")
dx2poa <-c("Y","N","Y","Y")
df<-data.frame(pt, dx1, dx2, dx1poa, dx2poa)

想要

> df
  pt  dx1  dx2 dx1poa dx2poa
1  1  443  453      Y      Y
2  2 5521 5431      N      N
3  3 6647  779      N      Y
4  4  812 6782      N      Y

1 个答案:

答案 0 :(得分:1)

考虑一下:

df<-data.frame(pt, dx1, dx2, dx1poa, dx2poa)
df
  pt  dx1  dx2 dx1poa dx2poa
1  1  443  453      Y      Y
2  2 5521 5431      N      N
3  3 6647  779      N      Y
4  4  812 6782      N      Y

df$com1 <- ifelse(df$dx1poa == 'Y', df$dx1, '')
df$com2 <- ifelse(df$dx2poa == 'Y', df$dx2, '')
df
  pt  dx1  dx2 dx1poa dx2poa com1 com2
1  1  443  453      Y      Y  443  453
2  2 5521 5431      N      N          
3  3 6647  779      N      Y       779
4  4  812 6782      N      Y      6782