簡體   English   中英

我有一個很長的數據集。 如何在使用排名功能限制創建的列數時轉換為寬格式?

[英]I have a long data set. How do I convert to wide format while using a rank function to limit the number of columns created?

我有一個長格式的數據集。 有些記錄只有一個制造商,有些記錄是重復的,因為有多個制造商與每個記錄相關聯。

例如,我有以下數據:

id      manufacturer
111     AAA
222     AAA
222     BBB
222     CCC
222     DDD
333     CCC
333     DDD
444     EEE

使用dplyr,我添加了一個排名,所以我可以計算制造商的數量。

df %>% 
  select(id, manufacturer) %>% 
  group_by(id) %>% 
  mutate(rank = rank(manufacturer, ties.method = "first"))

要得到:

id      manufacturer    rank
111     AAA             1
222     AAA             1
222     BBB             2
222     CCC             3
222     DDD             4
333     CCC             1
333     DDD             2
444     EEE             1

我試過dcast讓我很接近,但我不是那里。

dcast(df, id ~ rank)

當我使用dcast時,我得到:

id     1    2    3    4
111    1    NA   NA   NA
222    1    2    3    4
333    1    2    NA   NA
444    1    NA   NA   NA

我想要得到的是:

id     manuf_1    manuf_2    manuf_3    manuf_4
111    AAA                                
222    AAA        BBB        CCC        DDD
333    CCC        DDD        
444    EEE                          

你只需要設置value.var和變異rank之前你想要的格式dcast

df %>% 
  dplyr::mutate(rank = paste0('manuf_', rank)) %>% 
  reshape2::dcast(id ~ rank, value.var = 'manufacturer')
#    id manuf_1 manuf_2 manuf_3 manuf_4
# 1 111     AAA    <NA>    <NA>    <NA>
# 2 222     AAA     BBB     CCC     DDD
# 3 333     CCC     DDD    <NA>    <NA>
# 4 444     EEE    <NA>    <NA>    <NA>

使用的數據

df <- data.table::fread('
id      manufacturer    rank
111     AAA             1
222     AAA             1
222     BBB             2
222     CCC             3
222     DDD             4
333     CCC             1
333     DDD             2
444     EEE             1
')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM