13

私はdata.frame次のようなものを持っています:

# set example data
df <- read.table(textConnection("item\tsize\tweight\tvalue
A\t2\t3\t4
A\t2\t3\t6
B\t1\t2\t3
C\t3\t2\t1
B\t1\t2\t4
B\t1\t2\t2"), header = TRUE)

# print example data
df
  item size weight value
1    A    2      3     4
2    A    2      3     6
3    B    1      2     3
4    C    3      2     1
5    B    1      2     4
6    B    1      2     2

ご覧のとおり、sizeとのweight列はそれぞれ同じであるため、複雑さを追加することはありませんitem。ただし、value同じ に対して複数のが存在する場合がありますitem

itemmean を使用して、data.frame を折りたたんで、1 行につき 1 行にしvalueます。

  item size weight value
1    A    2      3     5
3    B    1      2     3
4    C    3      2     1

関数を使用する必要があると思いaggregateますが、上記の結果をどのように正確に取得できるかわかりませんでした。

4

5 に答える 5

17
aggregate(value ~ item + size + weight, FUN = mean, data=df)

  item size weight value
1    B    1      2     3
2    C    3      2     1
3    A    2      3     5
于 2013-08-14T09:54:14.750 に答える
5

ddplyfrom plyr パッケージを使用したソリューションは次のとおりです。

library(plyr)
ddply(df,.(item),colwise(mean))
  item size weight value
1    A    2      3     5
2    B    1      2     3
3    C    3      2     1
于 2013-08-14T12:22:22.527 に答える
3

解決策はdata.table...

require(data.table)
DT <- data.table(df)

DT[ , lapply(.SD , mean ) , by = item ]
   item size weight value
1:    A    2      3     5
2:    B    1      2     3
3:    C    3      2     1
于 2013-08-14T10:09:21.260 に答える
3

今日、これは私がすることです:

library(dplyr)

df %>%
  group_by(item, size, weight) %>%
  summarize(value = mean(value)) %>%
  ungroup

これにより、次の結果が得られます。

# A tibble: 3 x 4
   item  size weight value
  <chr> <int>  <int> <dbl>
1     A     2      3     5
2     B     1      2     3
3     C     3      2     1

受け入れられた回答は、具体的に求めたとおりのままaggregateにしますが、dplyr解決策が最も読みやすいと思います。

于 2017-10-16T11:29:52.080 に答える