2015-09-05 66 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))