【问题标题】:Turn information in a single column into multiple columns [duplicate]将单列中的信息转换为多列[重复]
【发布时间】:2019-09-12 16:20:17
【问题描述】:

我在 R 中有一个数据框,其中一列中有一个代码子集。例如,

 df <- data.frame(
  x = 1:3,
  y = c("a", "d,e,f", "g,h"),
  stringsAsFactors = FALSE
)

我想最终得到一个数据框,其中第一列是键(“x”),然后是“a”、“b”、“c”...的列,其中每一行都有一个 1或 0 表示给定键值是否存在该值。我不知道我手头有多少这些变量。 我试过了

n_vars <- df$y %>% str_split(",") %>% lappy(function(z) length(z)) %>% unlist() %>% max()
df <- separate(df, y, sep = ",", into = as.character(1:n_vars))

我不确定下一步是什么。任何帮助表示赞赏!

【问题讨论】:

    标签: r tidyr


    【解决方案1】:

    看起来像是来自splitstackshapecSplit_e 的完美案例

    library(splitstackshape)
    cSplit_e(df, "y", type = "character", fill = 0, drop = TRUE)
    
    #  x y_a y_d y_e y_f y_g y_h
    #1 1   1   0   0   0   0   0
    #2 2   0   1   1   1   0   0
    #3 3   0   0   0   0   1   1
    

    使用dplyrtidyr,我们可以使用separate_rowsspread

    library(dplyr)
    library(tidyr)
    
    df %>%
      separate_rows(y) %>%
      mutate(n = 1) %>%
      spread(y, n, fill = 0)
    

    【讨论】:

    • 谢谢!太完美了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2018-06-09
    • 1970-01-01
    相关资源
    最近更新 更多