2

集計を使用した後に 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」を「平均」にのみ変更できます。

  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」に変更する方法。

4

1 に答える 1

2

aggregate複数の関数でそのように使用するmatrixと、列として a になります。

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

そこから、通常どおり列の名前を変更できます。

于 2013-10-18T09:23:18.713 に答える