Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何避免;“无通用尺寸”;单独的_行()函数出错_R_Tidyr_Data Cleaning - Fatal编程技术网

R 如何避免;“无通用尺寸”;单独的_行()函数出错

R 如何避免;“无通用尺寸”;单独的_行()函数出错,r,tidyr,data-cleaning,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, S

我处理的数据如下所示:

    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:
    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 
我有两个变量,AF:affiliation和AU:authors。不同的作者和从属关系用分号分隔,我想使用separate_rows-command创建如下内容:

    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:
    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 
标准版本的separate_rows()会生成错误消息,可能是因为我的数据包含NAs:

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

authaf\u spread如果调用
separate\u rows
两次,它就会工作。我使用stringr中的
str_trim
删除作者姓名和从属关系前后出现的空白,并使用tidyr中的
drop_na
删除两列都有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

如果您两次调用
separate_rows
,它将工作。我使用stringr中的
str_trim
删除作者姓名和从属关系前后出现的空白,并使用tidyr中的
drop_na
删除两列都有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

我认为OP只需要
df%>%的独立行(AF,AU,sep=“;”)
。就这些。我从你的答案中得到了这个想法。这就是我为什么不回答的原因。我之前试过了,但出现了一个错误。只有当我像在这篇文章中那样将两个
separate_行
调用分开时,它才起作用。我很想知道是否有人能通过一个电话就让它工作。我刚刚意识到,数据集中可能有问题。实际上,我运行代码:
df%>%在我的计算机中使用
head(df)
分隔行(AF,AU,sep=“;”)
。成功了!。但是,我将其应用于整个df。然后我也犯了一个错误!你是对的。数据集中一定有错误。我检查了一下,发现一个变量的值比另一个多14个,我现在记不清是哪一个了。@maydin我很高兴你用整个df在单个调用中重现了错误。可能只是一些固有的不匹配的数值。我认为OP只需要
df%>%的单独行(AF,AU,sep=“;”)
。就这些。我从你的答案中得到了这个想法。这就是我为什么不回答的原因。我之前试过了,但出现了一个错误。只有当我像在这篇文章中那样将两个
separate_行
调用分开时,它才起作用。我很想知道是否有人能通过一个电话就让它工作。我刚刚意识到,数据集中可能有问题。实际上,我运行代码:
df%>%在我的计算机中使用
head(df)
分隔行(AF,AU,sep=“;”)
。成功了!。但是,我将其应用于整个df。然后我也犯了一个错误!你是对的。数据集中一定有错误。我检查了一下,发现一个变量的值比另一个多14个,我现在记不清是哪一个了。@maydin我很高兴你用整个df在单个调用中重现了错误。可能只是一些固有的不匹配的数值。