我有下面提到的数据框:
TYPE Type1 Con1 Type2 Con2
A 10 5 15 2
B NA NA 10 3
C 20 10 NA NA
D 5 5 15 3
我想要第2列和第4列以及第3列和第5列的意思,我试过这个New_DF<-rbind(DF[-1],c(colSums(DF[,c(2,4)],colMeans(DF[,c(3,5)]))))
,但它无法正常工作。
期望的输出:
TYPE Type1 Con1 Type2 Con2
A 10 5 15 2
B NA NA 10 3
C 20 10 NA NA
D 5 5 15 3
Total 35 5 40 2
答案 0 :(得分:1)
E.g。这样
df <- data.frame(Type = c("A", "B", "C", "D"),
Type1 = c(10, NA, 20, 5),
Con1 = c(5, NA, 10, 5),
Type2 = c(15, 10, NA, 15),
Con2 = c(2, 3, NA, 3), stringsAsFactors = F)
rbind(df, c("Total", colSums(df[, 2:5], na.rm = TRUE) / rep(c(1, nrow(df)), 2)))
Type Type1 Con1 Type2 Con2
1 A 10 5 15 2
2 B <NA> <NA> 10 3
3 C 20 10 <NA> <NA>
4 D 5 5 15 3
5 Total 35 5 40 2
答案 1 :(得分:0)
首先,将NA
替换为0。
dat2 <- dat
dat2[is.na(dat2)] <- 0
之后,使用sapply
根据列名将sum或mean应用于不同的列。
result <- sapply(names(dat2[, -1]), function(x){
if (grepl("Type", x)){
return(sum(dat2[, -1][[x]]))
} else if (grepl("Con", x)){
return(mean(dat2[, -1][[x]]))
}
})
然后合并结果。
dat3 <- data.frame(t(result))
dat3$TYPE <- "Total"
dat4 <- rbind(dat, dat3)
dat4
# TYPE Type1 Con1 Type2 Con2
# 1 A 10 5 15 2
# 2 B NA NA 10 3
# 3 C 20 10 NA NA
# 4 D 5 5 15 3
# 5 Total 35 5 40 2
数据强>
dat <- read.table(text = "TYPE Type1 Con1 Type2 Con2
A 10 5 15 2
B NA NA 10 3
C 20 10 NA NA
D 5 5 15 3",
header = TRUE, stringsAsFactors = FALSE)