这个问题可能很愚蠢。如何在以下数据框中添加列为数字的行。我们可以在不更改列名的情况下执行此操作。感谢。
Perinatal_Region 1 2 NaN total
1 13456 12770 1
2 36975 35470 NA
3 19116 18156 2
4 84653 81120 4
5 57015 54313 4
NaN 1 1 NA
答案 0 :(得分:0)
如果您只想对以数字命名的列加总:
data <- data.frame(Perinatal_region = c(1,2,3,4,5,1/0), one = c(13456,36975,19116,84653,57015,1 ), two = c(12770, 35470, 18156, 81120, 54313, 1))
names(data) <- c("Perinatal_region", "1", "2")
columns_to_sum <- c()
for(name in names(data)){
if (is.na(as.numeric(name))==FALSE){ #If the name is not a number as.numeric() returns NA
columns_to_sum <- c(columns_to_sum, name)
}
}
a <- colSums(data[columns_to_sum])
结果如下:
> a
1 2
211216 201830
答案 1 :(得分:0)
您可以通过以下几种方式完成此操作:
df <- structure(list(Perinatal_Region = c(1, 2, 3, 4, 5, NaN), `1` = c(13456L,
36975L, 19116L, 84653L, 57015L, 1L), `2` = c(12770L, 35470L,
18156L, 81120L, 54313L, 1L), `NaN` = c(1L, NA, 2L, 4L, 4L, NA
)), .Names = c("Perinatal_Region", "1", "2", "NaN"), class = "data.frame", row.names = c(NA,
-6L))
rowSums(df[,grep("\\d+", colnames(df))])
#[1] 26226 72445 37272 165773 111328 2
如果是:
colSums(df[,grep("\\d+", colnames(df))])
# 1 2
#211216 201830
或者
within(df, Total<- `1` +`2`)
# Perinatal_Region 1 2 NaN Total
#1 1 13456 12770 1 26226
#2 2 36975 35470 NA 72445
#3 3 19116 18156 2 37272
#4 4 84653 81120 4 165773
#5 5 57015 54313 4 111328
#6 NaN 1 1 NA 2
addmargins(as.table(as.matrix(df[,c("1", "2")])))
# 1 2 Sum
#A 13456 12770 26226
#B 36975 35470 72445
#C 19116 18156 37272
#D 84653 81120 165773
#E 57015 54313 111328
#F 1 1 2
#Sum 211216 201830 413046
到所有列1
,2
和NaN
within(df, Total<- `1` +`2` +`NaN`)
rowSums(df[,grep("\\d+|NaN", colnames(df))], na.rm=T)
#[1] 26227 72445 37274 165777 111332 2