【问题标题】:Assigning column name as cell value if column contains specific value如果列包含特定值,则将列名分配为单元格值
【发布时间】:2020-02-17 02:24:19
【问题描述】:

我对 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”的列名指定为单元格值?

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以基于rowSums 创建一个逻辑索引,并在对所有值为 TRUE 的行进行子集化后复制“pairs_NA”的列名

    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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      相关资源
      最近更新 更多