我正试图将我的数据从长格式改为宽格式。
我的数据集是500万行,但这里是通用格式::
ID fact_id fact_value
1 1 a
1 2 b
1 3 a
1 4 a
1 5 a
1 6 a
2 1 b
2 2 a
2 3 b
3 4 c
4 1 a
4 2 b
4 3 c
ID是参与者的ID号。fact_id对应于调查中的一个问题。fact_value对应于参与者的答案。
我正试图将数据转换为宽格式;ID";有自己的行,fact_id数字是新的列值。我想要的示例:
ID 1 2 3 4 5 6
1 a b a a a a
2 b a b NA NA NA
3 NA NA NA c NA NA
4 a b c NA NA NA
我运行了这个代码:
widedata <- longdata %>%
reshape(idvar = "ID", v.names = "fact_value", timevar = "fact_id", direction = "wide")
我的输出很奇怪。这是一张图片(我的ID列实际上是md5id(:每个ID值都有自己的行。然而,fact_id数字并没有创建自己的列。有一个ID列和一个表示fact_value.c的列(应该是列名的fact_ID数字列表(。fact_values没有显示在任何地方——只有NA值。
ID和fact_ value是";字符";并且fact_id是"0";整数";。我也运行了这个,得到了相同的结果:
widedata <- longdata %>%
reshape(idvar = "ID", v.names = "fact_value", timevar = as.character("fact_id"), direction = "wide")
我也运行了这个,得到了相同的结果:
widedata <- longdata%>%
reshape(idvar = "ID", timevar = "fact_id", direction = "wide")
知道可能发生什么/如何更改我的代码吗?
我们可以使用pivot_wider
:
library(tidyr)
pivot_wider(df, names_from = fact_id, values_from = fact_value
ID `1` `2` `3` `4` `5` `6`
<int> <chr> <chr> <chr> <chr> <chr> <chr>
1 1 a b a a a a
2 2 b a b NA NA NA
3 3 NA NA NA c NA NA
4 4 a b c NA NA NA