我有一个包含少量列的数据框,特定两列的头部如下所示(总共有几千行):
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
我想它可以通过循环或某些特定功能完成 - 你能告诉我最好的解决方案吗? 我猜有些函数会最快,但循环应该更灵活(即我可以改变组合列的条件)。
答案 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.na
和rowSums
会更快。
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