如何解决R:unnest 函数如何工作以及如何克服不兼容的长度错误? 我研究过的来源列表:
我从早上开始就在 SO 上彻底研究这个问题。原始数据集有 1000 多行。 我的全局目标是提取特定的列来运行 OLS 回归。
我选择了我需要的列并使用 pivot_wider
将其转换为宽格式。在转换后的表中,我有 5 列代表指标名称。行是响应者的 ID,值是答案。
问题是在转换之后,值会变异为嵌套对象。我尝试使用 unnest(cols = everything())
在示例数据集上解决此问题。它工作正常:
examp_df <- tibble(
seance = rep(1:5,each = 5),ind = rep(inds,5),ind_name = rep(inds_name,answer = list(rep(rnorm(5,0.7,1),5))
)
examp_df_wide <- examp_df %>%
pivot_wider(id_cols = seance,names_from = ind_name,values_from = answer)
exmap_df_wide <- examp_df_wide %>%
unnest(cols = everything())
但是当我在我的原始数据集上尝试它时,我收到一个关于长度不兼容的错误。然后我不明白 unnest
是如何工作的。
这是我遇到问题的 the dataset。如何取消嵌套数据?
我研究过的来源列表:
原始数据为 here。
原始数据的代码如下:
data_all <- data_all %>%
pivot_wider(id_cols = seance_id,values_from = criteria_answ)
> data_all <- data_all %>%
+ unnest(cols = everything())
Error: Incompatible lengths: 4,5.
Run `rlang::last_error()` to see where the error occurred.
解决方法
如果你想要一个非嵌套的数据框,你可以这样做:
library(tidyr)
pivot_wider(data_all,names_from = ind_name,values_from = criteria_answ)
# A tibble: 3,930 x 7
# seance_id criteria name2 name1 name3 name5 name4
# <chr> <chr> <chr> <chr> <chr> <chr> <chr>
# 1 3133688 ind3_2 7 NA NA NA NA
# 2 3133688 ind4_2 6 NA NA NA NA
# 3 3133688 ind3_3 NA 7 NA NA NA
# 4 3133688 ind3_4 NA NA 7 NA NA
# 5 3133688 ind4_3 NA 6 NA NA NA
# 6 3133688 ind4_4 NA NA 6 NA NA
# 7 3133688 nps NA NA NA 5 NA
# 8 3145092 ind1_1 NA NA NA NA 5
# 9 3145092 ind1_2 4 NA NA NA NA
#10 3145092 ind1_3 NA 5 NA NA NA
# … with 3,920 more rows
如果您想要每个 seance_id
都在 1 行中的输出,您需要考虑如何在 seance_id
的列中显示超过 1 个值的那些值?例如,如果您查看上面的输出,seance_id = 3133688
在 name2
列中有两个值。要将 3133688
折叠为一行,您将如何组合这些值?您是要取它们的 sum
、mean
还是将它们组合为一个逗号分隔值。您可以在 values_fn
中使用 pivot_wider
参数并传递要应用的函数。例如,使用 toString
:
pivot_wider(data_all,id_cols = seance_id,values_from = criteria_answ,values_fn = toString)
# A tibble: 422 x 6
# seance_id name2 name1 name3 name5 name4
# <chr> <chr> <chr> <chr> <chr> <chr>
# 1 3133688 7,6 7,6 7,6 5 NA
# 2 3145092 4,5,8 5,9 5,6,7 3 5,8
# 3 3143656 10 10 10 10 10
# 4 3145088 9,9,9 10,8,8 9,10,7 8 9,10
# 5 3145117 6,4,7 7,9 7,9 6 8,9
# 6 3148589 10,7 10,5 8,5 9 10,7
# 7 3135731 10,7 9,6 8,8 8 10,7
# 8 3145111 7,7,9 10,9 9,9 4 9,9
# 9 3149981 8,8 8,9 8,8 9 9,9
#10 3150048 9 10 10 10 9
# … with 412 more rows
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。