正如 Gainz 的回答所建议的那样,separate_rows(df1, A, B, C, convert = T) 工作得非常好。
但是,如果您在数据框中确实有空白单元格,那么它确实会变得更难使用,因为它会给您一个关于所有列的行数不同的错误。
我建议使用您知道不会有空白值的列。假设它是 A 列。
我首先将数据框转换为小标题,然后将所有因子列转换为字符列。然后我会用正确数量的逗号替换空白单元格。那么separate_rows()应该可以正常工作了。
那么代码将如下所示:
df1_tibble <- df1 %>%
as_tibble() %>%
mutate_if(is.factor, as.character)
df1_clean <- df1_tibble %>%
mutate(count = str_count(A, ",") + 1) %>%
mutate(temp_str = map_chr(count, ~ rep("", .x) %>% paste0(collapse = ","))) %>%
mutate_at(vars(B, C), funs(ifelse(str_length(.) == 0, temp_str, .))) %>%
select(A, B, C)
df1_clean
#> # A tibble: 2 x 3
#> A B C
#> <chr> <chr> <chr>
#> 1 P,Q P1,Q1 P2,Q2
#> 2 X,Y , X2,Y2
df1_clean %>% separate_rows(A, B, C)
#> # A tibble: 4 x 3
#> A B C
#> <chr> <chr> <chr>
#> 1 P P1 P2
#> 2 Q Q1 Q2
#> 3 X "" X2
#> 4 Y "" Y2