在列表列中更改时出现警告消息 "argument is not an atomic vector; coercing"

warning message "argument is not an atomic vector; coercing" when mutating in a list column

我在我的数据中做了一些重塑。我基本上在做两件事:

下面的代码似乎可以满足我的要求,但我收到一条警告消息。虽然这只是一条警告消息,但我想确保我做的是正确的。

library(tidyverse)
df <- data.frame(x = c("first", "first", "second", "third"),
                 y = c("A", "B", "C, D", "E, F, G"))

df

       x       y
1  first       A
2  first       B
3 second    C, D
4  third E, F, G

.

df |>
  group_by(x) |>
  summarise(y = list(y)) |> 
  rowwise() |>
  mutate(y = list(as.vector(y, mode = "character"))) |>
  ungroup() |>
  mutate(across(y, ~if_else(!str_detect(x, "first"), str_split(., ", "), y)))

哪个(正确地)给出:

# A tibble: 3 x 2
  x      y        
  <chr>  <list>   
1 first  <chr [2]>
2 second <chr [2]>
3 third  <chr [2]>

但有一个警告:

Warning message:
Problem with `mutate()` input `..1`.
i `..1 = across(...)`.
i argument is not an atomic vector; coercing 

我知道吗can/should?

您可以使用 tidyr::separate_rows 更轻松地获得此结果:

df |>
  separate_rows(y) |>
  group_by(x) |>
  summarise(y = list(y))

#     x      y        
#     <chr>  <list>   
#   1 first  <chr [2]>
#   2 second <chr [2]>
#   3 third  <chr [3]>