2

私はかなり混乱していて、探しているものを検索することさえできませんでした. 私はさまざまな国で複数年にわたる調査を行っていますが、現在は次のようになっています。

        質問年 CountryA CountryB ... CountryZ
        1 1999 はい いいえ いいえ
        2 1999 はい はい はい

つまり、現在は質問ごとに編成されています。国、年、質問番号ごとにデータを整理したい:

国 年 質問 回答
      A 1999 1 はい
      A 1999 2 はい
      B 1999 1 いいえ
      B 1999 2 はい

等々。これは可能ですか?正しい答えに導くものを見つけることができないようです。
前もって感謝します!

4

2 に答える 2

4

最も直接的なアプローチはmelt、「reshape2」から使用することです。あなたのdata.frameが「mydf」と呼ばれると仮定します:

> library(reshape2)
> melt(mydf, id.vars=1:2)
  Question Year variable value
1        1 1999 CountryA   Yes
2        2 1999 CountryA   Yes
3        1 1999 CountryB    No
4        2 1999 CountryB   Yes
5        1 1999 CountryZ    No
6        2 1999 CountryZ   Yes

アップデート

私の心は base からの結果の名前を適切に処理する方法に取り組んでいませreshapeんが、次のようなこともできます:

names(mydf) <- sub("Country", "Country.", names(mydf))
setNames(
  reshape(mydf, direction="long", idvar=1:2, varying=3:ncol(mydf)),
  c("Question", "Year", "Country", "Answer"))
#          Question Year Country Answer
# 1.1999.A        1 1999       A    Yes
# 2.1999.A        2 1999       A    Yes
# 1.1999.B        1 1999       B     No
# 2.1999.B        2 1999       B    Yes
# 1.1999.Z        1 1999       Z     No
# 2.1999.Z        2 1999       Z    Yes

どこ:

mydf <- structure(list(Question = 1:2, Year = c(1999L, 1999L), CountryA = c("Yes", 
  "Yes"), CountryB = c("No", "Yes"), CountryZ = c("No", "Yes")), .Names = c("Question", 
  "Year", "CountryA", "CountryB", "CountryZ"), class = "data.frame", row.names = c(NA, -2L))
于 2013-04-11T11:26:13.310 に答える
0

@Anandaの方法に従う

DF <- read.table(text="Question \t Year CountryA    CountryB    CountryZ
1   1999    Yes No  No
2   1999    Yes Yes Yes", sep="\t", header=T)

> DF
  Question Year CountryA CountryB CountryZ
1        1 1999      Yes       No       No
2        2 1999      Yes      Yes      Yes

DF <- melt(DF, id.vars=1:2, value.name="Answer", variable.name="Country")

> DF
  Question Year  Country Answer
1        1 1999 CountryA    Yes
2        2 1999 CountryA    Yes
3        1 1999 CountryB     No
4        2 1999 CountryB    Yes
5        1 1999 CountryZ     No
6        2 1999 CountryZ    Yes

次に、国の列のレベルを変更するだけです...

于 2013-04-11T13:05:04.657 に答える