0

最終的に機能したのは次のとおりです。

        a <- cast(we, year ~ region, mean, value='response') 

ただし、地域とサイトごとに 1 つの観測しかないため、平均は単なる回避策です。c を関数として動作させることができませんでした。

  • 提案された回答の出力 (ジャスティンによる)

        > DT
        > response year
        > 1:      15 2000
        > 2:       6 2000
        > 3:      23 2000
        > 4:      23 2000
         ---             
        > 794:       3 2010
        > 795:       5 2010
        > 796:       1 2010
    
  • 更新: 望ましい出力は次のようになります。

       > Year   x1  x2  x3   x4
       > 2000   4   5   16   22
       > 2001   6   11   2   18
       > 2002   1   0   21   10
       > ...
    

因子レベルに基づいてデータを転置する方法を見つけるのに苦労しています。因子と応答の 2 列のデータがあります。因子ごとに多くの行があるので、各因子が 1 つの行にあり、異なる応答がその行の列になるように表を転置したいと考えています。その要因のレベルに基づいてループ内でサブセット化することはできないようです。洞察をいただければ幸いです。

データの例:

          > response    year
          > 5           2001
          > 10          2001
          > 8           2001
          > 1           2002
          > 7           2010

  > levels(data$year)
  [1] "2000" "2001" "2002" "2003" "2004" "2005" ...
  w <- matrix(0,54,15)

  for(i in 1:levels(data$year)){
    w[i] <- levels(data$year)==i
  }

この構文は明らかに正しくありませんが、これは私が達成しようとしていることのアイデアです。

ありがとうございました。

4

3 に答える 3

1

data.tableパッケージを使用すると、これは簡単です:

library(data.table)
DT <- data.table(data)
DT[, as.list(value), by=year]

ただし、年間の観測数が異なる場合、これはうまくいきません。その代わり:

DT[, list(values = list(value)), by=year]

またはベースRを使用:

tapply(data$value, data$year, c)
于 2013-09-25T17:41:44.690 に答える
1

を使用した別の方法を次に示しaggregateます。

> set.seed(1)
> data <- data.frame(year = rep(2000:2010, each=10), value = sample(3:30, 110, TRUE))
> aggregate(value~year, data=data, FUN=c)
   year value.1 value.2 value.3 value.4 value.5 value.6 value.7 value.8 value.9 value.10
1  2000      10      13      19      28       8      28      29      21      20        4
2  2001       8       7      22      13      24      16      23      30      13       24
3  2002      29       8      21       6      10      13       3      13      27       12
4  2003      16      19      16       8      26      21      25       6      23       14
5  2004      25      21      24      18      17      25       3      16      23       22
6  2005      16      27      15       9       4       5      11      17      21       14
7  2006      28      11      15      12      21      10      16      24       5       27
8  2007      12      26      12      12      16      27      27      13      24       29
9  2008      15      22      14      12      24       8      22       6       9        7
10 2009       9       4      20      27      24      25      15      14      25       19
11 2010      21      12      10      30      20       8       6      16      28       19
于 2013-09-25T18:29:49.383 に答える
0

1 年ごとの回答数が異なる場合は、最初に毎年の回答を表す新しい変数を作成し、次にそのデータセットをdcast. デフォルトでdcastは、欠損値は で埋められますNAが、必要に応じて変更できます。

set.seed(1)
data = data.frame(year = c(rep(2000:2010, each=10), 2011), value = sample(3:30, 111, TRUE))

require(reshape2)
require(plyr)
# Create a new variable representing the number of responses per year and add to dataset
dat2 = ddply(data, .(year), transform, 
              response = interaction("x", 1:length(value), sep = ""))

dcast(dat2, year ~ response, value.var = "value")
于 2013-09-25T22:07:00.607 に答える