有以下原始数据,有必要在此基础上建立回归模型。列的元素充当自变量ind_name。
显然,表格需要“宽”,这可以使用pivot_wider. 但是,在表格转换为宽格式(其中列是元素ind_name)后,数据变为嵌套。也就是说,单元格中没有一个元素,而是一个元素向量。
sample <- readxl::read_xlsx("original.xlsx")
s <- sample[1:1000,]
s <- s %>%
pivot_wider(id_cols = seance_id,
names_from = ind_name,
values_from = criteria_answ) %>%
print(head(10))
# A tibble: 84 x 6
seance_id name2 name1 name3 name5 name4
<chr> <list> <list> <list> <list> <list>
1 3133688 <chr [2]> <chr [2]> <chr [2]> <chr [1]> <NULL>
2 3145092 <chr [4]> <chr [4]> <chr [4]> <chr [1]> <chr [4]>
3 3143656 <chr [1]> <chr [1]> <chr [1]> <chr [1]> <chr [1]>
4 3145088 <chr [3]> <chr [3]> <chr [3]> <chr [1]> <chr [3]>
5 3145117 <chr [3]> <chr [3]> <chr [3]> <chr [1]> <chr [3]>
6 3148589 <chr [3]> <chr [3]> <chr [3]> <chr [1]> <chr [3]>
7 3135731 <chr [3]> <chr [3]> <chr [3]> <chr [1]> <chr [3]>
8 3145111 <chr [5]> <chr [5]> <chr [5]> <chr [1]> <chr [5]>
9 3149981 <chr [4]> <chr [4]> <chr [4]> <chr [1]> <chr [4]>
10 3150048 <chr [1]> <chr [1]> <chr [1]> <chr [1]> <chr [1]>
# ... with 74 more rows
unnest(cols = everything())如果将函数或具有类似属性的函数应用于结果unchop,则会发生错误:
Ошибка: Incompatible lengths: 4, 5.
Run `rlang::last_error()` to see where the error occurred.
也就是说,由于嵌套向量的长度不同(并且在某处数据没有嵌套,而只是以正常形式呈现),该函数无法将工作表“分解”为单元格。
问题:如何将数据转化为正常的表格形式,适合在其基础上建立回归模型?作为“正常”视图的示例:
seance_id name1 name2
<dbl> <dbl> <dbl>
1 1 0.396 -0.379
2 1 -0.000982 0.160
3 2 -1.03 0.700
4 2 -1.06 0.208
5 2 0.320 -0.568
也许还有另一种方法来表示这种类型的数据来构建回归模型?在 SO 的英文部分,我没有找到解决方案。
观察结果变成了一个列表,因为在你想要的表示中,字符串是只有第一个变量的唯一值(并且在数据本身中,一对的值 \u200b\u200b变量是唯一的),获得的多个观察值必须放在一个单元格中。
看数据。例如,要观察 where
seance_id == "3133688",具有名称的列name1应同时包含 and"7"和"6":实际上,
pivot_wider()当以这种方式使用时,函数本身会告诉您可以做什么:即,使用参数
values_fn,您可以在其中传递将应用于此类集合的函数。如果您传递函数的名称
length(),那么,如警告中所写,您可以看到结果列表的重复长度:正如我们所看到的,甚至有五个“重复”的列表。
应该应用哪个函数取决于您的数据的含义和您面临的目标。例如,您可以取这些值的平均值(只有首先您必须将最后一个变量从字符串转换为数字,例如,使用调用
mutate()andas.numeric()):由reprex 包(v0.3.0)于 2021-03-17 创建