我在3个条件下进行了实验。数据目前的组织方式如下:
| X | Y | Z |
| | 1 | |
| | 0 | |
| 0 | | |
| 0 | | |
| | | 1 |
| | | 1 |
我希望它看起来像这样:
| Y | 1 |
| Y | 0 |
| X | 0 |
| X | 0 |
| Z | 1 |
| Z | 1 |
这是因为很多分析似乎都需要这种格式。
我希望可能有一个功能可以进行这种转换,因为它似乎很常见。
编辑:
我尝试使用下面的重塑建议,但遇到了问题。它似乎没有影响结构。我的数据必须与构建的测试数据有所不同,但我不确定如何。
我遇到了一些麻烦,想想也许你可以帮忙。
> simpleGame
Q6.4 Q7.4 Q8.4
3 2
5 2
8 1
11 2
13 1
14 2
16 1
17 1
19 2
23 2
24 1
26 2
28 2
但是当我融化时,它似乎没有改变任何东西:
> na.omit(melt(simpleGame))
Using Q6.4, Q7.4, Q8.4 as id variables
Q6.4 Q7.4 Q8.4
1 2
2 2
3 1
4 2
5 1
6 2
7 1
8 1
9 2
10 2
11 1
12 2
13 2
我们非常感谢任何建议。
Edit2:根据要求,这是数据框的输入:
> dput(simpleGame)
structure(list(Q6.4 = structure(c(1L, 1L, 1L, 1L, 1L, 3L, 1L,
1L, 3L, 3L, 1L, 3L, 3L), .Label = c("", "1", "2", "Which do you choose?"
), class = "factor"), Q7.4 = structure(c(1L, 1L, 2L, 1L, 2L,
1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L), .Label = c("", "1", "2", "Which do you choose?"
), class = "factor"), Q8.4 = structure(c(3L, 3L, 1L, 3L, 1L,
1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L), .Label = c("", "1", "2", "Which do you choose?"
), class = "factor")), .Names = c("Q6.4", "Q7.4", "Q8.4"), row.names = c(3L,
5L, 8L, 11L, 13L, 14L, 16L, 17L, 19L, 23L, 24L, 26L, 28L), class = "data.frame")
我想也许这与实际因素有关?我不知道如何将整个data.frame强制转换为数字,但我想也许会这样做。
答案 0 :(得分:5)
如果您的数据如下:
df <- structure(list(X = c(NA, NA, 0, 0, NA, NA), Y = c(1, 0, NA, NA,
NA, NA), Z = c(NA, NA, NA, NA, 1, 1)), .Names = c("X", "Y", "Z"
), class = "data.frame", row.names = c(NA, -6L))
试试这个:
na.omit(stack(df))
# values ind
# 3 0 X
# 4 0 X
# 7 1 Y
# 8 0 Y
# 17 1 Z
# 18 1 Z
如果您需要订单:
na.omit(stack(df[c(2,1,3)]))[c(2,1)]
# ind values
# 1 Y 1
# 2 Y 0
# 9 X 0
# 10 X 0
# 17 Z 1
# 18 Z 1
答案 1 :(得分:4)
使用reshape2
和@Arun数据结构:
na.omit(melt(df))
Using as id variables
variable value
3 X 0
4 X 0
7 Y 1
8 Y 0
17 Z 1
18 Z 1
使用OP结构编辑
dat.m <- melt(dat,measure.vars = c('Q6.4','Q7.4','Q8.4'))
dat.m[!(dat.m$value == ''),]
解释:您的所有列都是因素。 melt
的默认行为是将因子列作为id。作为一种解决方法,我告诉熔化它们是可测量的变量,因此melt
将rownames作为id。对于第二部分,我只是将na.omit
替换为!(dat.m$value == '')
,因为我没有NA值,我只是空字符。