【发布时间】:2020-11-03 08:31:13
【问题描述】:
这与How to identify which columns are not "NA" per row in a matrix? 的问题相同,但针对的是数据框而不是矩阵。
我有一个包含 205 行和 62 列的数据框。我想确定每行没有 NA 作为其值的列名。例如:
col1 col2 col3 col4 col5 col6
row1 NA NA NA NA fact fact
row2 num num NA NA NA NA
row3 num num NA NA int int
row4 NA NA NA NA fact fact
row5 NA NA int int NA NA
row6 NA NA int NA NA NA
结果应该是:
row1 col5;col6
row2 col1;col2
row3 col1;col2;col5;col6
row4 col5;col6
row5 col3;col4
row6 col3
理想情况下,结果应该作为额外的列添加到数据框中。
【问题讨论】:
-
df$non_nas <- apply(!is.na(df), 1, function(x) paste(colnames(df)[x], collapse = ";")) -
使用
which和tapply的选项:idx <- which(!is.na(dat), arr.ind = TRUE); stack(tapply(row.names(idx), names(dat)[idx[, 'col']], toString))