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)