R:错误:在 dplyr 中使用 unnest 时长度不兼容

Posted

技术标签:

【中文标题】R:错误:在 dplyr 中使用 unnest 时长度不兼容【英文标题】:R: Error: Incompatible lengths when using unnest in dplyr 【发布时间】:2020-09-22 21:07:00 【问题描述】:

我有一个大标题 (here)。我使用this 原始数据集创建它并运行以下命令(上一篇文章here):

#this code seemed to work
    library(tidyverse)
    df_tib <- df_full_subset %>%
      pivot_longer(cols = everything(), names_to = c("name", ".value"), names_pattern = "(.*)_(.*)") %>%
      select(-name) %>%
      pivot_wider(names_from = "01", values_from = "02", values_fn = list)

从上一篇文章中可以看出,有最后一段代码可以取消嵌套该数据。这对我不起作用,所以我修改了 tibble 并找到了一些垃圾列(例如一列 NA),并删除了那些可能有帮助的想法。但是,我不断收到相同的错误:"Error: Incompatible lengths: 254, 257"。这对我来说就像dplyr 在第 254 行和第 257 行与 NA 作斗争,但我已经看到其他似乎很容易处理的帖子(比如使用 filter 的one),这些解决方案确实不适用于此数据。

#cleaning the data
df_tib$habitat <- df_tib$habitat_
df_tib$species <- df_tib$species_
df_tib <- janitor::clean_names(df_tib)
df_tib <- df_tib %>% 
  select(-habitat_,-species_, -na)

df_tib <- df_tib %>% 
  unnest(cols = everything()) #does not work

非常感谢任何帮助。

【问题讨论】:

@akrun 抱歉,我应该澄清一下。在未经处理的数据集(第二个链接)中,可以在 R 中查看它以查看行数(观察值)。 254 和 257 行充满了许多 NA,这是我唯一能想到的为什么长度现在不兼容,在被操纵到 tibble 之后(但仍然保留该信息)。但是,有相当多的行带有 NA,因此在原始数据集中,为什么这些行特别有问题是没有意义的。 @akrun names_pattern 似乎在那个***代码中工作;但是,您是否建议那里的一个未被注意到的错误可能导致取消嵌套的努力失败?例如,如果其中一个键没有被它捕获? 【参考方案1】:

我刚刚注意到您的数据中有第一列 X,这 不需要 需要包含在您的 pivot_longer 语句中。要旋转除 X 之外的所有列,您可以执行 pivot_longer(cols = -X, ...)

我还在pivot_longer 之后添加了drop_na。否则,此 NA 列缺少值、objectid 和 editMode。

试试这个:

library(tidyverse)

df %>%
  pivot_longer(cols = -X, names_to = c("name", ".value"), names_pattern = "(.*)_(.*)") %>%
  drop_na %>%
  select(-name) %>%
  pivot_wider(names_from = "01", values_from = "02", values_fn = list) %>%
  unnest(cols = everything())

输出

       X bearing_degrees coordinates distance_meters habitat_ how_many_animal… observers species_ was_a_group_of_… was_the_animal_… width_of_the_ro… what_species_of… livestock
   <int> <chr>           <chr>       <chr>           <chr>    <chr>            <chr>     <chr>    <chr>            <chr>            <chr>            <chr>            <chr>    
 1     1 200             N1.20701 E… 100             open_sc… 4                TW2       giraffe  group_           "alive"          single_lane      NA               NA       
 2     2 300             N1.20195 E… 20              commiph… NA               TW2 o     gerenuk  individual       "alive"          single_lane      NA               NA       
 3     3 10              N1.18823 E… 80              open_sc… NA               TW2       bird     individual       "alive"          single_lane      Ostrich          NA       
 4     4 20              N1.15642 E… 180             open_sc… 300              TW2       livesto… group_           "alive"          single_lane      NA               shoat    
 5     5 300             N1.14868 E… 30              open_sc… 7                TW2       livesto… group_           "alive"          single_lane      NA               cattle   
 6     6 70              N1.13874 E… 200             open_sc… 34               TW2       livesto… group_           "alive"          single_lane      NA               cattle   
 7     7 20              N1.11442 E… 40              disturb… 12               TW2       livesto… group_           "alive"          single_lane      NA               cattle   
 8     8 NA              N1.03003 E… NA              commiph… NA               TW2       jackal   NA               "roadkill"       single_lane      NA               NA       
 9     9 40              N1.97961 E… 50              mixed_s… null             TW2       gerenuk  individual       "alive,\n    wh… NA               NA               null     
10    10 20              N0.85822 E… 20              dense_s… 53               TW2       baboon   group_           "alive"          single_lane      NA               NA       
# … with 251 more rows, and 5 more variables: approximate_age_of_individual <chr>, approximate_number_of_days_sinc <chr>, sex_of_animal <chr>, generated_note_survey <chr>,
#   `_date` <chr>

【讨论】:

这太完美了,谢谢@Ben!我的绊脚石是试图摆脱上游的 NA(在原始数据集中)并且就在 unnest 命令之前......我应该考虑在 pivot_longer 之后这样做!

以上是关于R:错误:在 dplyr 中使用 unnest 时长度不兼容的主要内容,如果未能解决你的问题,请参考以下文章

dplyr unnest() 不适用于大逗号分隔的数据

R Shiny Reactive 值,dplyr 过滤器错误?

R package dplyr 重新安装每个实例

使用txt文件作为源时的Tidytext unnest_tokens错误

无法使用 R dplyr 在旧版 SQL 查询中引用 SQL 视图

在 R 中使用 dplyr 进行过滤时,为啥过滤掉的变量级别会保留在过滤后的数据中? [复制]