使用NA将数据帧转换为多列数据帧

时间:2020-08-21 15:50:24

标签: r dataframe

例如,我有一个有关以下三个国家/地区电视节目收视率的数据框。我想将此数据帧转换为多列数据帧,并以第二列中的值作为列标题。

  Ratings  Countries
   102.71  Austria
   103.21  Austria
    ....
   103.87  Belgium
    ...

转换后:

 Austria Belgium Canada
 102.71  103.87  470.49
 103.21  106.06  483.52
 109.86  114.1   492.41
 194.1   119.98  498.56
       

我知道我可以使用unstack()函数来实现。但是,unstack()的假设是每一列都有相同的行数。我的问题是,如果不同国家/地区的评分数量不同,该怎么办?这样,我希望NA填补空缺。例如,

      Ratings  Countries
       102.71  Austria
       103.21  Austria
       103.87  Belgium
    

转换后:

Austria Belgium 
 102.71  103.87  
 103.21  NA

我不确定如何将NA插入到我的转换中。谢谢!

1 个答案:

答案 0 :(得分:1)

我建议使用tidyverse方法:

library(tidyverse)

df %>% group_by(Countries) %>% mutate(id=1:n()) %>%
 pivot_wider(names_from = Countries, values_from=Ratings) %>% 
 select(-id)

输出:

# A tibble: 2 x 2
  Austria Belgium
    <dbl>   <dbl>
1    103.    104.
2    103.     NA 

使用了一些数据:

df <- structure(list(Ratings = c(102.71, 103.21, 103.87), Countries = c("Austria", 
"Austria", "Belgium")), class = "data.frame", row.names = c(NA, 
-3L))