2

私は長い形式のデータ セットを持っており、年に 3 ~ 5 回実施される単一のテストで 3 つのスコアの正確な日付/時刻測定値が含まれています。

    ID  Date                    Fl  Er  Cmp
    1   9/24/2010 11:38         15  2   17
    1   1/11/2011 11:53         39  11  25
    1   1/15/2011 11:36         39  11  39
    1   3/7/2011 11:28          95  58  2
    2   10/4/2010 14:35         35  9   6
    2   1/7/2011 13:11          32  7   8
    2   3/7/2011 13:11          79  42  30
    3   10/12/2011 13:22        17  3   18
    3   1/19/2012 14:14         45  15  36
    3   5/8/2012 11:55          29  6   11
    3   6/8/2012 11:55          74  37  7
    4   9/14/2012 9:15          62  28  18
    4   1/24/2013 9:51          82  45  9
    4   5/21/2013 14:04         135 87  17
    5   9/12/2011 11:30         98  61  18
    5   9/15/2011 13:23         55  22  9
    5   11/15/2011 11:34        98  61  17
    5   1/9/2012 11:32          55  22  17
    5   4/20/2012 11:30         23  4   17

このデータを、月に基づく時間帯 (つまり、秋 = 8 月から 10 月、冬 = 1 月から 2 月、春 = 3 月から 5 月) の短い形式に変換する必要があります。一部のバンドには、参加者ごとに複数の観測が含まれるため、「スピルオーバー」バンドが必要になります。以下の Fl スコアの変換例。

ID  Fall1Fl     Fall2Fl     Winter1Fl       Winter2Fl       Spring1Fl       Spring2Fl
1   15          NA          39              39              95              NA
2   35          NA          32              NA              79              NA
3   17          NA          45              NA              28              74
4   62          NA          82              NA              135             NA
5   98          55          55              NA              23              NA

「冗長」な日付 (つまり、8 月から 10 月までの 1 回以上の観測) が Fall2fl 列にあふれていることに注意してください。目的の範囲外の日付 (つまり、11 月、12 月、6 月、7 月) は削除する必要があります。最終的なデータ セットには、Fl Er と Cmp を含む追加の列が必要です。

どんな助けでも大歓迎です!

(長いデータを含む .csv ファイルへのリンクhttp://mentor.coe.uh.edu/Data_Example_Long.csv )

4

1 に答える 1

3

これはあなたが探していることをしているようですが、あなたの望む出力と正確には一致しません。サンプルデータを見て、問題がサンプルの目的の出力にあるのか、私が行った変換にあるのかを確認していませんが、コードに従って、変換がどのように行われたかを確認できるはずです。

## Convert dates to actual date formats
mydf$Date <- strptime(gsub("/", "-", mydf$Date), format="%m-%d-%Y %H:%M")

## Factor the months so we can get the "seasons" that you want
Months <- factor(month(mydf$Date), levels=1:12)
levels(Months) <- list(Fall = c(8:10),
                       Winter = c(1:2),
                       Spring = c(3:5),
                       Other = c(6, 7, 11, 12))
mydf$Seasons <- Months

## Drop the "Other" seasons
mydf <- mydf[!mydf$Seasons == "Other", ]

## Add a "Year" column
mydf$Year <- year(mydf$Date)

## Add a "Times" column
mydf$Times <- as.numeric(ave(as.character(mydf$Seasons), 
                             mydf$ID, mydf$Year, FUN = seq_along))

## Load "reshape2" and use `dcast` on just one variable.
##   Repeat for other variables by changing the "value.var"
dcast(mydf, ID ~ Seasons + Times, value.var="Fluency")
#   ID Fall_1 Fall_2 Winter_1 Winter_2 Spring_2 Spring_3
# 1  1     15     NA       39       39       NA       95
# 2  2     35     NA       32       NA       79       NA
# 3  3     17     NA       45       NA       29       NA
# 4  4     62     NA       82       NA      135       NA
# 5  5     98     55       55       NA       23       NA
于 2013-10-19T04:44:55.133 に答える