r-将数据从长到宽重新整形,不创建新列



我正试图将我的数据从长格式改为宽格式。

我的数据集是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 

最新更新