将具有NA的列与新列组合并将其附加到现有df

时间:2018-04-13 10:27:41

标签: r dataframe

我有一个包含少量列的数据框,特定两列的头部如下所示(总共有几千行):

  corprsd1 corprsd2
2        1       NA
3       NA        0
4       NA        0
5        1       NA
6        1       NA
7       NA        0

因为对于每一行中的一行中的NAs总是在第二列中对应于0或1,所以我想将这些行组合成1并将其附加到当前数据帧,以获得类似的结果:

  corprsd1 corprsd2 corcombined
2        1       NA       1
3       NA        0       0
4       NA        0       0
5        1       NA       1
6        1       NA       1
7       NA        0       0

我想它可以通过循环或某些特定功能完成 - 你能告诉我最好的解决方案吗? 我猜有些函数会最快,但循环应该更灵活(即我可以改变组合列的条件)。

2 个答案:

答案 0 :(得分:2)

更简单:

df <- data.frame(
  corprsd1 = c(1, NA, NA, 1, 1, NA),
  corprsd2 = c(NA, 0, 0, NA, NA, 0)
)

df$combined <- rowSums(df, na.rm = T)

产生预期的输出:

  corprsd1 corprsd2 combined
1        1       NA        1
2       NA        0        0
3       NA        0        0
4        1       NA        1
5        1       NA        1
6       NA        0        0

答案 1 :(得分:1)

你不需要循环。使用is.narowSums会更快。

corprsd1 <- c(1, NA, NA, 1, 1, NA)
corprsd2 <- c(NA, 0, 0, NA, NA, 0)
table <- cbind(corprsd1, corprsd2)     # generate your original table without the rownames of 2:7
table[is.na(table)] <- 0     # replace NAs with 0s
table2 <- cbind(table, rowSums(table))     # generates new table with rowSums
colnames(table2) <- c("corprsd1", "corprsd2", "corcombined")
rownames(table2) <- c(2:7)
table2

哪个产生

  corprsd1 corprsd2 corcombined
2        1       NA           1
3       NA        0           0
4       NA        0           0
5        1       NA           1
6        1       NA           1
7       NA        0           0