如何避免eparate_rows()函数的“ No common size”错误

时间:2019-08-23 16:41:30

标签: r tidyr data-cleaning

我正在处理看起来像这样的数据:

    AF:         AU:
1   MIT Duflo, Esther
2   NBER; NBER  Freeman, Richard B.; Gelber, Alexander M.
3   U MI; Cornell U; U VA   Bound, John; Lovenheim, Michael F.; Turner, Sarah
4   Harvard U; U Chicago    Fryer, Roland G., Jr.; Levitt, Steven D.
5   U OR; U CA, Davis; U British Columbia   Lindo, Jason M.; Sanders, Nicholas J.; Oreopoulos, Philip

我有两个变量,AF:隶属关系,AU:作者。不同的作者和单位之间用分号分隔,我想使用sepeparate_rows-command并创建如下内容:

   AF:               AU:
    MIT               Duflo, Esther
    NBER              Freeman, Richard B.
    NBER              Gelber, Alexander M.
    U MI              Bound, John 
    Cornell U         Lovenheim, Michael F. 
    U VA              Turner, Sarah
    Harvard U;        Fryer, Roland G., Jr.
    U Chicago         Levitt, Steven D.
    U OR              Lindo, Jason M.
    U CA,             Davis Sanders, Nicholas J. 
    U British ColumbiaOreopoulos, Philip 

标准版本的eparate_rows()会生成一条错误消息,可能是因为我的数据包含NA:

authaf_spread<-separate_rows(authaf, 1:2, sep=";")
Error: All nested columns must have the same number of elements.

我下载并安装了开发版本,这给了我另一个错误消息:

authaf_spread<-separate_rows(authaf, 1:2, sep=";")
Error: No common size for `AF:`, size 3, and `AU:`, size 4.
Call `rlang::last_error()` to see a backtrace

这是什么意思,我该如何避免该错误?

如果有人感兴趣,我会在整个文件上附加一个链接:

https://www.dropbox.com/s/z456w7ll7v7o79z/authors_affiliations.csv?dl=0

1 个答案:

答案 0 :(得分:2)

如果您两次致电separate_rows,它将起作用。我使用了来自stringr的str_trim来删除作者姓名和从属之前和之后出现的空格,并使用了drop_na的tidyr来删除了两列均具有NA的行。

# Loaded your .csv file as variable 'df'

authors <- df %>%
  separate_rows(AF., sep = ";") %>%
  separate_rows(AU., sep = ";") %>%
  mutate_all(~ str_trim(., side = "both")) %>%
  drop_na

# A tibble: 24,877 x 2
   AF.       AU.                  
   <chr>     <chr>                
 1 MIT       Duflo, Esther        
 2 NBER      Freeman, Richard B.  
 3 NBER      Gelber, Alexander M. 
 4 NBER      Freeman, Richard B.  
 5 NBER      Gelber, Alexander M. 
 6 U MI      Bound, John          
 7 U MI      Lovenheim, Michael F.
 8 U MI      Turner, Sarah        
 9 Cornell U Bound, John          
10 Cornell U Lovenheim, Michael F.
# … with 24,867 more rows

您还可以使用distinct删除与作者和隶属关系重复的行。

authors %>% distinct(AF., AU.)

# A tibble: 5,873 x 2
   AF.       AU.                  
   <chr>     <chr>                
 1 MIT       Duflo, Esther        
 2 NBER      Freeman, Richard B.  
 3 NBER      Gelber, Alexander M. 
 4 U MI      Bound, John          
 5 U MI      Lovenheim, Michael F.
 6 U MI      Turner, Sarah        
 7 Cornell U Bound, John          
 8 Cornell U Lovenheim, Michael F.
 9 Cornell U Turner, Sarah        
10 U VA      Bound, John          
# … with 5,863 more rows