我很困惑,甚至无法搜索我正在寻找的东西。我对不同国家进行了多年调查,目前是这样的:
问题年份 CountryA CountryB ... CountryZ 1 1999 是 否 否 2 1999 是 是 是
也就是说,它目前是按问题组织的。我希望按国家、年份和问题编号排列数据:
国家年份问题答案 A 1999 1 是 A 1999 2 是 B 1999 1 无 B 1999 2 是等等。这甚至可能吗?我似乎找不到任何东西来指导我找到正确的答案。
提前致谢!
最直接的方法是使用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))
遵循@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
那么这只是改变国家列的级别的问题......