基于另一列展开列';s分组(dplyr/tidyr)
我正在尝试转换如下表:基于另一列展开列';s分组(dplyr/tidyr),r,dplyr,reshape2,tidyr,R,Dplyr,Reshape2,Tidyr,我正在尝试转换如下表: # A tibble: 10 x 2 user_id pred <int> <fctr> 1 27 electronics 2 27 home 3 38 health 4 60 electronics 5 60 beauty 6 92 home 7 92 electronics
# A tibble: 10 x 2
user_id pred
<int> <fctr>
1 27 electronics
2 27 home
3 38 health
4 60 electronics
5 60 beauty
6 92 home
7 92 electronics
8 106 health
9 117 home
10 117 women
# A tibble: 6 x 3
user_id pred_1 pred_2
<dbl> <chr> <chr>
1 27 electronics home
2 38 health NA
3 60 electronics beauty
4 92 home electronics
5 106 health NA
6 117 home women
#一个tible:10x2
用户id pred
1 27电子设备
2727家
3 38健康
460电子产品
560美女
692家
792电子产品
8 106健康
9117家
10117名妇女
对于一个看起来像这样的人:
# A tibble: 10 x 2
user_id pred
<int> <fctr>
1 27 electronics
2 27 home
3 38 health
4 60 electronics
5 60 beauty
6 92 home
7 92 electronics
8 106 health
9 117 home
10 117 women
# A tibble: 6 x 3
user_id pred_1 pred_2
<dbl> <chr> <chr>
1 27 electronics home
2 38 health NA
3 60 electronics beauty
4 92 home electronics
5 106 health NA
6 117 home women
#一个tible:6 x 3
用户id pred_1 pred_2
1 27电子家居
2 38卫生署
360电子美容
492家用电器
5 106卫生署
6117名家庭妇女
i、 e.每个用户id
一行,并将pred
列扩展为pred\u 1
,pred\u 2
等。有什么想法吗
更新
最初的问题解决了。后续行动:
使用
tidyr::spread
方法,是否有一种方法将group\u size
限制为N
,这样在进行传播时,每个组最多只需要N
个值?我们在按“用户id”分组后创建一个序列列,然后将spread
从“长”改为“宽”
library(dplyr)
library(tidyr)
df1 %>%
group_by(user_id) %>%
mutate(id = paste0("pred_", row_number()),
id = factor(id, levels = unique(id))) %>%
spread(id, pred)
# user_id pred_1 pred_2
# <int> <chr> <chr>
#1 27 electronics home
#2 38 health <NA>
#3 60 electronics beauty
#4 92 home electronics
#5 106 health <NA>
#6 117 home women
或者使用data.table
库(data.table)的devel版本;dcast(setDT(df),user_id~rowid(user_id))
谢谢大家,但我并不认为这是另一个问题的重复。如果说有什么区别的话,这是一种更简洁的方式来公开tidyr::spread
的功能解决方案是相同的。现在世界各地都有几十种类似的解决方案,其中许多都是由同一个用户发布的。您可以检查其中一些,然后确定。我有一个更新的问题(以及一个单独的问题,答案如下所述)。我遇到了一个错误,pred\uu
值不符合顺序。例如:我的列的顺序是pred_1
,pred_10
,pred_11
。。。等等pred_2
在列中48@NickResnick我更新了dplyr/tidyr的帖子。请检查是否有帮助。谢谢!你能回答更新后的问题吗?具体来说,你能选择它创建的列数小于max\u grouping
?@NickResnick你能把它作为一个新问题发布吗?因为这个问题被重复了,看起来是个有趣的问题。我刚刚问过。另外,这里还有一个错误,相同的用户id
出现在多行中,每行中只有部分pred
?