1

展示 A のこのフォームから展示 B のフォームにデータを再形成しようとしています。3 つの列ごとにデータを再形成してループし、データセットを追加しようとしましたが、うまくいきません。どうすればこれを再形成できますか?

A   AFG1    AFG2    AFG3    US1 US2 US3 t
    5   7   9   3   4   5   1980
    6   8   10  4   6   5   2000


B   1   2   3   t   xtry        
    5   7   9   1980    AFG     
    6   8   10  2000    AFG     
    3   4   5   1980    US      
    4   6   5   2000    US      
4

1 に答える 1

4

あなたdata.frameが「mydf」と呼ばれていると仮定して、これを試してください:

reshape(mydf, direction = "long",
        idvar = "t",
        varying = 1:6,
        v.names = c("1", "2", "3"), 
        times = c("AFG", "US"),
        timevar = "xtry")
#             t xtry 1 2  3
# 1980.AFG 1980  AFG 5 7  9
# 2000.AFG 2000  AFG 6 8 10
# 1980.US  1980   US 3 4  5
# 2000.US  2000   US 4 6  5

あなたの問題については、変数の名前がRが期待するもの(、、などの形式)とは異なるため、単純な問題よりも引数を少し冗長にする必要がありreshapeます。1.AFG2.AFG

例えば:

mydf2 <- mydf
names(mydf2) <- gsub("([A-Z]+)([0-9]+)", "\\2\\.\\1", names(mydf2))

あなたの名前が次のようになっている場合:

names(mydf2)
# [1] "1.AFG" "2.AFG" "3.AFG" "1.US"  "2.US"  "3.US"  "t" 

コマンドはreshapeもう少し直接的です。

reshape(mydf2, direction = "long", idvar = "t",
        timevar = "xtry", varying = 1:6)

reshape2

「reshape2」ソリューションを探している場合、実際には、ベースRのreshape関数を使用するよりも少し手間がかかります(通常はその逆です)。これが私が思いついたものです:

まず、meltデータセット。

library(reshape2)
mydf_m <- melt(mydf, id.vars="t")
head(mydf_m)
#      t variable value
# 1 1980     AFG1     5
# 2 2000     AFG1     6
# 3 1980     AFG2     7
# 4 2000     AFG2     8
# 5 1980     AFG3     9
# 6 2000     AFG3    10

その「変数」列は、現在の形式ではほとんど役に立たないので、修正しましょう。

mydf_m <- cbind(mydf_m, 
                colsplit(gsub("([A-Z]+)([0-9]+)", 
                              "\\1_\\2", mydf_m$variable), 
                         "_", c("xtry", "var")))

データは次のようになります。

head(mydf_m)
#      t variable value xtry var
# 1 1980     AFG1     5  AFG   1
# 2 2000     AFG1     6  AFG   1
# 3 1980     AFG2     7  AFG   2
# 4 2000     AFG2     8  AFG   2
# 5 1980     AFG3     9  AFG   3
# 6 2000     AFG3    10  AFG   3

ここで簡単な部分があります。

dcast(mydf_m, t + xtry ~ var)
#      t xtry 1 2  3
# 1 1980  AFG 5 7  9
# 2 1980   US 3 4  5
# 3 2000  AFG 6 8 10
# 4 2000   US 4 6  5
于 2013-02-06T18:49:01.220 に答える