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,因此在原始数据集中,为什么这些行特别有问题是没有意义的。 @akrunnames_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 时长度不兼容的主要内容,如果未能解决你的问题,请参考以下文章
R Shiny Reactive 值,dplyr 过滤器错误?
使用txt文件作为源时的Tidytext unnest_tokens错误