2015-09-05 79 views
1

我有一個15列的數據框,其中第一列是一個整數,其他是數字。我必須生成除最後一列之外的所有列的總和的單線總結。我需要生成最後一列的平均值。所以,我在下面做一些事情:R - 數據幀列的求和改變數據類型

summary <- c(sum(df$col1), ... mean(df$col15)) 

summary然後用值出現達小數點後兩位,即使是整數列(第一個)。我一直在嘗試round函數來解決這個問題。我可以理解,當添加不同的類型時,例如1 + 1.0。但是,在這種情況下,不應該總和保持數據類型嗎?

請讓我知道我錯過了什麼?

+0

@Frank我試圖模擬OP所做的,而不是手動爲每列執行'sum'。 – akrun

+0

好吧,我明白了。但我想這不是問題的核心。 (大概,upvoters的閱讀方式與你所做的一樣,所以如果沒有OP舉例,很容易不同意。) – Frank

+0

@Frank我現在明白了。如果OP顯示一個示例並且預期輸出 – akrun

回答

1

如果你正在尋找一個一行摘要:

lst <- c(lapply(df[-ncol(df)], function(x) sum(x)), mean=mean(df[,ncol(df)])) 
as.data.frame(lst) 
# int num1 mean 
#1 10 6 2.5 

輸出是保持每個矢量的類的數據幀。如果你想輸出將被添加到原始數據幀可以取代as.data.frame(lst)有:

names(lst) <- names(df) 
rbind(df, lst) 

如果你想獲得的所有整數列的和與數值列的平均值,一起去@弗蘭克回答。

數據

df <- data.frame(int=1:4, num1=seq(1,2,length.out=4), num2=seq(2,3,length.out=4)) 
+0

我會試一試。但是,簡單的「sum」和「mean」有什麼問題?向量輸出對於我正在處理的這個特定情況來說已經足夠了。 – cogitoergosum

+0

矢量只能有一種類型。你不能混合數字和整數。 –

+0

哦,是的,當然!謝謝。 – cogitoergosum

0

也許這樣的一個適應?

apply(iris[,1:4], 2, sum)/c(rep(1,3), nrow(iris))