在R语言中统计指定列(x1-x4)并生成新列x1_x4的技术求助
嗨,这事儿好办!先咱们先把你的数据框明确下来,方便复现和测试:
df <- data.frame( ID = c(1,2,3,4,5,6,7,8,9,10), x1 = c(0,NA,0,1,0,0,1,1,1,NA), x2 = c(0,NA,1,0,0,NA,0,1,0,0), x3 = c(0,NA,0,1,1,0,1,1,1,0), x4 = c(0,NA,0,0,0,0,1,1,1,1) )
你提到要对x1到x4列做统计计算生成x1_x4新列,不过没说具体是哪种统计量,我给你列几种最常用的方案,你按需选用:
1. 每行x1-x4的求和(自动忽略NA)
如果是要计算每行这四列的总和,用rowSums最方便,加上na.rm = TRUE就能跳过缺失值:
df$x1_x4 <- rowSums(df[, c("x1", "x2", "x3", "x4")], na.rm = TRUE)
要是你想让全是NA的行(比如第2行)结果保持NA而不是0,可以加个判断:
# 仅当行内不全是NA时求和,全NA则返回NA df$x1_x4 <- ifelse( rowSums(is.na(df[, c("x1", "x2", "x3", "x4")])) == 4, NA, rowSums(df[, c("x1", "x2", "x3", "x4")], na.rm = TRUE) )
2. 每行x1-x4中非NA值的计数
如果是要统计每行这四列里有多少个非缺失值,用rowSums结合!is.na就行:
df$x1_x4 <- rowSums(!is.na(df[, c("x1", "x2", "x3", "x4")]))
3. 每行x1-x4的均值(忽略NA)
计算每行的平均值的话,直接用rowMeans:
df$x1_x4 <- rowMeans(df[, c("x1", "x2", "x3", "x4")], na.rm = TRUE)
4. 每行x1-x4的最大值/最小值(忽略NA)
要是需要找每行的最大值或最小值,用apply函数指定按行计算:
# 最大值 df$x1_x4 <- apply(df[, c("x1", "x2", "x3", "x4")], 1, max, na.rm = TRUE) # 最小值(把max换成min就行) df$x1_x4 <- apply(df[, c("x1", "x2", "x3", "x4")], 1, min, na.rm = TRUE)
如果还有其他统计需求(比如标准差、中位数),都可以用apply替换对应的函数,比如median、sd就好。
内容的提问来源于stack exchange,提问作者Ariya Woodard
相关产品推荐
相关产品推荐

