提问人:Sam 提问时间:2/17/2020 更新时间:2/17/2020 访问量:241
如果列包含特定值,则将列名称指定为单元格值
Assigning column name as cell value if column contains specific value
问:
我对 R 很陌生。我有一个数据框,其中包含成对的入院和出院变量,这些变量应该匹配,例如:
V1adm V1dis V2adm V2dis V3adm V3dis
1 120 120 yes yes 60 60
2 110 110 yes <NA> 40 40
3 60 NA no <NA> NA NA
4 90 NA <NA> no 20 NA
如果缺少任何一个变量对,我创建了一个具有 TRUE 的数据帧:
# Variable names
adm_vars<- c("V1adm", "V2adm", "V3adm")
dis_vars<- c("V1dis", "V2dis", "V3dis")
# Create empty dataframe
pairs_NA<- matrix(NA, ncol=3, nrow=nrow(data))
pairs_NA<- as.data.frame(pairs_NA)
names(pairs_NA)<- paste(adm_vars, dis_vars, sep = '_')
# Add TRUE if adm OR dis variable NA
for(i in 1:3){
x<- data[, adm_vars[i]]
y<- data[, dis_vars[i]]
pairs_NA[,i]<- is.na(x) | is.na(y)
}
V1adm_V1dis V2adm_V2dis V3adm_V3dis
1 FALSE FALSE FALSE
2 FALSE TRUE FALSE
3 TRUE TRUE TRUE
4 TRUE TRUE TRUE
对于所有 3 个都缺失的行,我想创建一个数据框,如果缺少该对(即列在pairs_NA中为 TRUE),则将“pairs_NA”中的列名作为单元格值。它应该看起来像这样:
1 2 3
3 V1adm_V1dis V2adm_V2dis V3adm_V3dis
4 V1adm_V1dis V2adm_V2dis V3adm_V3dis
如果每行的列中都有“TRUE”,我有没有办法将“pairs_NA”的列名指定为单元格值?
答:
2赞
akrun
2/17/2020
#1
我们可以基于“pairs_NA”的列名创建一个逻辑索引,并在子集所有值为 TRUE 的行后复制列名rowSums
i1 <- rowSums(pairs_NA) == ncol(pairs_NA)
matrix(names(pairs_NA)[col(pairs_NA[i1,])], ncol = ncol(pairs_NA))
# [,1] [,2] [,3]
#[1,] "V1adm_V1dis" "V2adm_V2dis" "V3adm_V3dis"
#[2,] "V1adm_V1dis" "V2adm_V2dis" "V3adm_V3dis"
评论