我在使用聚合后创建了一个data.frame,然后我尝试更改某些列的列名。 data.frame(df)为:
DistanceFromBase Layer Nitrogen x.mean x.sd
1 5 1-2 HN 50.884615 10.841870
2 10 1-2 HN 64.846154 8.008457
3 15 1-2 HN 65.538462 7.500564
4 20 1-2 HN 65.461538 8.448577
5 25 1-2 HN 65.000000 9.055385
6 30 1-2 HN 65.565217 9.806427
我用过
colnames(df)
和colnames:
[1] "DistanceFromBase" "Layer" "Nitrogen" "x"
我想将列名“x.mean”和“x.sd”分别更改为“mean”和“sd”。
colnames(df)[4] <- "mean"
只能将“x”更改为“mean”,如下:
DistanceFromBase Layer Nitrogen mean.mean mean.sd
1 5 1-2 HN 50.884615 10.841870
2 10 1-2 HN 64.846154 8.008457
3 15 1-2 HN 65.538462 7.500564
4 20 1-2 HN 65.461538 8.448577
5 25 1-2 HN 65.000000 9.055385
6 30 1-2 HN 65.565217 9.806427
如何将列名“x.mean”和“x.sd”更改为“mean”和“sd”。
答案 0 :(得分:2)
当您使用aggregate
这样的多个功能时,最终会以matrix
作为列:
output <- aggregate(. ~ Species, data = iris[c(1, 5)],
function(x) c(Mean = mean(x), Sum = sum(x)))
str(output)
# 'data.frame': 3 obs. of 2 variables:
# $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 2 3
# $ Sepal.Length: num [1:3, 1:2] 5.01 5.94 6.59 250.3 296.8 ...
# ..- attr(*, "dimnames")=List of 2
# .. ..$ : NULL
# .. ..$ : chr "Mean" "Sum"
简单的方法是在输出中使用do.call(data.frame, ...)
,如下例所示。
output2 <- do.call(data.frame, output)
str(output2)
# 'data.frame': 3 obs. of 3 variables:
# $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 2 3
# $ Sepal.Length.Mean: num 5.01 5.94 6.59
# $ Sepal.Length.Sum : num 250 297 329
从那里,您可以照常重命名列。