[英]How to sum up all rows except the 1st which is a factor
我有這個簡單的數據框:
>fruits
X Apple Banana Orange
1 1 5.2 5.0 4.2
2 2 2.6 4.4 3.7
3 3 2.7 2.4 2.7
4 4 4.0 1.3 6.2
5 5 6.5 3.1 4.1
6 6 4.2 3.8 5.4
>str(fruits)
'data.fram e': 6 obs. of 4 variables:
$ X : Factor w/ 6 levels "1","2","3","4",..: 1 2 3 4 5 6
$ Apple : num 5.2 2.6 2.7 4 6.5 4.2
$ Banana: num 5 4.4 2.4 1.3 3.1 3.8
$ Orange: num 4.2 3.7 2.7 6.2 4.1 5.4
我需要對除第一列以外的所有行進行求和。 我試圖循環:
>for(i in 1:nrow(fruits)) {fruits$total[i] <- sum(fruits[i,-1])} print (fruits$total)
Error: unexpected symbol in "for(i in 1:nrow(fruits)) {fruits$total[i] <- sum(fruits[i,-1])} print"
有任何想法嗎?
如果@Roland希望發布答案,則將其刪除。 但是,是的, rowSums
絕對是我要做的方式。
設置數據以匹配您的數據:
> fruits <- read.table(h=T, text = "X Apple Banana Orange
1 1 5.2 5.0 4.2
2 2 2.6 4.4 3.7
3 3 2.7 2.4 2.7
4 4 4.0 1.3 6.2
5 5 6.5 3.1 4.1
6 6 4.2 3.8 5.4")
> fruits$X <- as.factor(fruits$X)
> sapply(fruits, class)
# X Apple Banana Orange
# "factor" "numeric" "numeric" "numeric"
獲取特定於您的數據集的非因子列的行總和:
> rowSums(fruits[-1])
# 1 2 3 4 5 6
# 14.4 10.7 7.8 11.5 13.7 13.4
或者(甚至更好),因為如果您不知道因子列在數據中的位置,則可以使用is.factor
的邏輯否定在計算is.factor
> rowSums(fruits[!sapply(fruits, is.factor)])
# 1 2 3 4 5 6
# 14.4 10.7 7.8 11.5 13.7 13.4
請記住,最后一行將從計算中刪除所有因子列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.