【问题标题】:R: Splitting of column into twoR:将列拆分为两列
【发布时间】:2021-11-07 19:03:46
【问题描述】:

您好,我有这张表是由包 Publish 制成的,该函数称为 univariatetable。

> > table1 = summary(univariateTable(vaccinated~Sex+Agegrp+Q(SampleAge)+variable1+variable2+etc.etc.
>                                  data = hospital),
>                  show.pvalues=F)

我得到的表格是这样的,在括号中显示频率和百分比(我只是输入了人工数字而不是所有变量):

Variable LEVEL Vaccinated =1 (n=52) Vaccinated = 0 (n=34)
Sex M 30 (57.7) 60 (54.3)
F 22 (42.3) 46 (34.7)

我希望将已接种疫苗 = 1 和已接种疫苗 = 0 的列拆分为 4 个单独的列:一列用于频率,一列用于百分比。我怎样才能这样做,同时将所有其他变量保留在表中?

我已经尝试过了,但它并没有保留表格中的所有变量

str_split_fixed(table1$`vaccinated = 0 (n=34)`, " ", 2)

【问题讨论】:

    标签: r split


    【解决方案1】:

    类似这样的:

    library(data.table)
    library(dplyr)
    
    ToNumeric <- function(x) {
       as.numeric(gsub(" |\\)", "", x))
    }
    
    new_table <- bind_cols(
       tstrsplit(table1$x1, "\\("),
       tstrsplit(table1$x2, "\\(")
    ) %>% data.frame() %>% apply(2, ToNumeric)
    

    其中 table1 是您的数据集,“x1”和“x2”类似于“Vaccinated =1 (n=52)”和“Vaccinated = 0 (n=34)”。 new_table 没有 colnames,您应该手动设置它。

    【讨论】:

    • 它有效 - 它现在给了我 4 列,而不是两列 - 但它不会在我的表中保留其他列 - 我如何在代码中表达这一点
    • 你可以使用:... %>% apply(2, ToNumeric) %>% bind_cols(table1[, -c(3, 4)])
    【解决方案2】:

    编辑

    数据:(注意格式正确的变量标签!)

    df <- data.frame(
      Variable = c("Sex", NA),  
      LEVEL = c("M", "F"),
      Vaccinated_1_n_52 = c("30 (57.7)", "60 (54.3)"),  
      Vaccinated_0_n_34 = c("22 (42.3)", "46 (34.7)"))
    

    现在将extract相关数据分列:

    library(dplyr)
    library(tidyr)
    df %>%
      extract(col = Vaccinated_1_n_52,
              into = c("Freq_Vacc_1", "Pctg_Vacc_1"),
              regex = "(\\d+)\\D+([\\d.]+)",
              convert = TRUE) %>%
      extract(col = Vaccinated_0_n_34,
              into = c("Freq_Vacc_0", "Pctg_Vacc_0"),
              regex = "(\\d+)\\D+([\\d.]+)",
              convert = TRUE) %>%
      cbind(df[,3:4], .) # omit this step if you don't need the original col's
      Vaccinated_1_n_52 Vaccinated_0_n_34 Variable LEVEL Freq_Vacc_1 Pctg_Vacc_1 Freq_Vacc_0
    1         30 (57.7)         22 (42.3)      Sex     M          30        57.7          22
    2         60 (54.3)         46 (34.7)     <NA>     F          60        54.3          46
      Pctg_Vacc_0
    1        42.3
    2        34.7
    

    【讨论】:

    • 我不想创建一个名为 Num_vacc 的新列,而是保留 vaccininated = 1 和 0 作为单独的列 - 然后创建两个包含百分比的新列 - 这是不可能的?
    猜你喜欢
    • 2019-05-02
    • 2017-12-16
    • 2021-12-28
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多