我在 R 中有一个名为 df 的数据框:
df
# A tibble: 20 × 2
# Groups: Professional_Assistance_Diet, How_successful_diet [9]
var val
<fct> <fct>
1 No Successful
2 I do not know Neutral
3 I do not know Very Successful
4 No Successful
5 No Successful
6 I do not know Very Successful
7 No Neutral
8 I do not know Successful
9 I do not know Neutral
10 Yes Very Successful
11 Yes Successful
12 No Not Successful
13 I do not know Very Successful
14 I do not know Not Successful
15 No Not Successful
16 I do not know Neutral
17 I do not know Successful
18 I do not know Neutral
19 No Neutral
20 Yes Very Successful
当我尝试将其旋转得更宽时,我收到:
> df %>%
+ pivot_wider(
+ names_from = var,
+ values_from = val
+ )
# A tibble: 1 × 3
No `I do not know` Yes
<list> <list> <list>
1 <fct [7]> <fct [10]> <fct [3]>
Warning message:
Values from `val` are not uniquely identified; output will contain list-cols.
• Use `values_fn = list` to suppress this warning.
• Use `values_fn = {summary_fun}` to summarise duplicates.
• Use the following dplyr code to identify duplicates.
{data} |>
dplyr::summarise(n = dplyr::n(), .by = c(var)) |>
dplyr::filter(n > 1L)
为什么?
数据
df = structure(list(var = structure(c(3L, 2L, 2L, 3L, 3L, 2L, 3L,
2L, 2L, 4L, 4L, 3L, 2L, 2L, 3L, 2L, 2L, 2L, 3L, 4L), levels = c("",
"I do not know", "No", "Yes"), class = "factor"), val = structure(c(4L,
3L, 5L, 4L, 4L, 5L, 3L, 4L, 3L, 5L, 4L, 2L, 5L, 2L, 2L, 3L, 4L,
3L, 3L, 5L), levels = c("Not at all Successful", "Not Successful",
"Neutral", "Successful", "Very Successful"), class = "factor")), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -20L), groups = structure(list(
Professional_Assistance_Diet = structure(c(2L, 2L, 2L, 2L,
3L, 3L, 3L, 4L, 4L), levels = c("", "i do not know", "No",
"Yes"), class = "factor"), How_successful_diet = structure(c(2L,
3L, 4L, 5L, 2L, 3L, 4L, 4L, 5L), levels = c("Not at all Successful",
"Not Successful", "Neutral", "Successful", "Very Successful"
), class = "factor"), .rows = structure(list(14L, c(2L, 9L,
16L, 18L), c(8L, 17L), c(3L, 6L, 13L), c(12L, 15L), c(7L,
19L), c(1L, 4L, 5L), 11L, c(10L, 20L)), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -9L), .drop = TRUE))
如果您只是想避免警告,您可以简单地指定
values_fn
,例如 values_fn = list
df %>%
pivot_wider(
names_from = var,
values_from = val,
values_fn = list
)
这给出了
# A tibble: 1 × 3
No `I do not know` Yes
<list> <list> <list>
1 <fct [7]> <fct [10]> <fct [3]>
否则,您可以使用
table
代替,而不是 pivot_wider
df %>%
{
t(table(.))
}
显示
var
val I do not know No Yes
Not at all Successful 0 0 0 0
Not Successful 0 1 2 0
Neutral 0 4 2 0
Successful 0 2 3 1
Very Successful 0 3 0 2