【问题标题】:I have lists as column-values. How do I get each list item into its own row?我有列表作为列值。如何将每个列表项放入自己的行中?
【发布时间】:2022-01-05 22:50:12
【问题描述】:

我在 R 中有一个如下所示的数据框:

Column 1 Column 2 Column 3 Column 4
c(x,y) c(a,b) qwert character(0)

我想取消列出数据框,使新的看起来像:

Column 1 Column 2 Column 3 Column 4
x a qwert N/A
y b N/A N/A

我曾尝试使用separate_rows,但它返回Error: Incompatible lengths

【问题讨论】:

  • 很难根据这些信息重新创建数据框结构。请粘贴dput(mydata) 的输出,其中mydata 是数据框。
  • 可能是tidyr::unnest(my_data)。可能需要指定列表列。
  • @GregorThomas 我试过这个,但它仍然给我不兼容的长度错误
  • 好吧,如果你有一个单行的一列长度为 2,另一列长度为 3(例如),那么结果应该是什么就不是很清楚了。如果您可以共享可重现的数据样本,我们可以看看,dput(your_data[example_rows, ]) 之类的内容是共享数据的最佳方式,包括所有类和结构信息。

标签: r list dataframe


【解决方案1】:

一个可能的解决方案:

library(tidyverse)

df <- data.frame(stringsAsFactors = FALSE, Column1 = c("c(x,y)"), Column2 = c("c(a,b)"), Column3 = c("qwert"), Column4 = c("character(0)"))

df %>% 
  mutate(Column4 = na_if(Column4, "character(0)")) %>% 
  separate_rows(1:2,sep = "\\(|,|\\)") %>% 
  filter(across(1:2, ~ !.x %in% c("c",""))) %>% 
  mutate(Column3 = if_else(row_number() == 1, Column3, NA_character_))

#> # A tibble: 2 × 4
#>   Column1 Column2 Column3 Column4
#>   <chr>   <chr>   <chr>   <chr>  
#> 1 x       a       qwert   <NA>   
#> 2 y       b       <NA>    <NA>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多