R 将列的唯一值转换为多个列,并在另一列中包含相应的值

R 将列的唯一值转换为多个列,并在另一列中包含相应的值,r,dataframe,data-manipulation,R,Dataframe,Data Manipulation,下面是一个与我正在使用的数据帧类似的示例数据帧: set.seed(74.3) df<-data.frame(ID=sample(c(1000:1004),size=20,replace=T), Fruit=sample(c("Apple","Banana","Pear","Orange","Plum"),size=20,replace=T)) library(dplyr) df <- df %>% group_by(ID,Fruit) %>% summarise(n

下面是一个与我正在使用的数据帧类似的示例数据帧:

set.seed(74.3)
df<-data.frame(ID=sample(c(1000:1004),size=20,replace=T),
Fruit=sample(c("Apple","Banana","Pear","Orange","Plum"),size=20,replace=T))
library(dplyr) 
df <- df %>%
group_by(ID,Fruit) %>% 
summarise(n=n())


      ID  Fruit     n
   (int) (fctr) (int)
1   1000 Banana     1
2   1000 Orange     3
3   1000   Pear     1
4   1001 Banana     1
5   1001   Plum     2
6   1002 Banana     1
7   1003 Banana     1
8   1003 Orange     2
9   1003   Pear     1
10  1003   Plum     1
11  1004  Apple     2
12  1004 Banana     2
13  1004 Orange     1
14  1004   Pear     1

对不起,如果这个问题已经发布了。我花了几个小时搜索,但没有找到答案。

使用
tidyr

library(tidyr); 
spread(df, Fruit, n, fill=0)

Source: local data frame [5 x 6]
Groups: ID [5]

     ID Apple Banana Orange  Pear  Plum
* <int> <dbl>  <dbl>  <dbl> <dbl> <dbl>
1  1000     0      1      3     1     0
2  1001     0      1      0     0     2
3  1002     0      1      0     0     0
4  1003     0      1      2     1     1
5  1004     2      2      1     1     0

使用
tidyr

library(tidyr); 
spread(df, Fruit, n, fill=0)

Source: local data frame [5 x 6]
Groups: ID [5]

     ID Apple Banana Orange  Pear  Plum
* <int> <dbl>  <dbl>  <dbl> <dbl> <dbl>
1  1000     0      1      3     1     0
2  1001     0      1      0     0     2
3  1002     0      1      0     0     0
4  1003     0      1      2     1     1
5  1004     2      2      1     1     0

当你搜索的时候,你可以看帖子。当你搜索的时候,你可以看帖子
reshape2::dcast(df, ID~Fruit, value.var = "n", fill = 0)