在R

时间:2019-05-15 21:29:25

标签: r dplyr tidyverse

我正在尝试找到一种方法来仅转置我的R数据框中的一列。

这是原始数据帧:

Fruits  Name  Count
Apple   Tom   2
Apple   Bob   2
Banana  Tom   1

这就是我想要的数据框:

Name  Apple Banana
Tom   2     1
Bob   2     0

请提前提供建议和感谢!

2 个答案:

答案 0 :(得分:3)

library(dplyr)
library(tidyr)
df <- data.frame(Fruits = c("Apple", "Apple", "Banana"),
                 Name = c("Tom", "Bob", "Tom"),
                 Count = c(2,2,1))
df
> df
  Fruits Name Count
1  Apple  Tom     2
2  Apple  Bob     2
3 Banana  Tom     1
df2 <- df %>% 
  tidyr::spread(key = Fruits, value = Count) %>% 
  replace(is.na(.), 0) %>% 
  dplyr::arrange(desc(Name))
df2
> df2
  Name Apple Banana
1  Tom     2      1
2  Bob     2      0

答案 1 :(得分:3)

使用@bbiasi数据:

tidyr::spread(df2, Fruits, Count, fill = 0)

#  Name Apple Banana
#1  Bob     2      0
#2  Tom     2      1

upd:在发布此消息之前,还没有看到@Jilber Urbina的评论