繁体   English   中英

R:将列拆分为两部分

[英]R: Splitting of column into two

嗨,我有这个由包 Publish 制作的表,该函数称为单变量表。

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

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

多变的 等级 已接种疫苗 =1 (n=52) 已接种疫苗 = 0 (n=34)
性别 30 (57.7) 60 (54.3)
F 22 (42.3) 46 (34.7)

我的愿望是将 vaccinated = 1 和 vaccinated = 0 的列分成 4 个单独的列:一个是频率,一个是百分比。 我怎样才能做到这一点,同时将所有其他变量保留在表中?

我试过这个,但它没有保留表中的所有变量

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

像这样的东西:

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”类似于“已接种疫苗 = 1 (n = 52)”和“已接种疫苗 = 0 (n = 34)”。 new_table 没有列名,您应该手动设置它。

也许这值得一试:

数据:

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)"))

现在pivot_longer然后将相关数据extract到列中:

library(dplyr)
library(tidyr)
df %>%
  pivot_longer(cols = 3:4, names_to = 'Vacc') %>%
  extract(col = Vacc,
          into = c("Num_vacc", "Total"),
          regex = "\\D+(\\d)\\D+(\\d+)",
          convert = TRUE) %>%
  extract(col = value,
          into = c("Freq", "Pctg"),
          regex = "(\\d+)\\D+([\\d.]+)",
          convert = TRUE)
# A tibble: 4 x 6
  Variable LEVEL Num_vacc Total  Freq  Pctg
  <chr>    <chr>    <int> <int> <int> <dbl>
1 Sex      M            1    52    30  57.7
2 Sex      M            0    34    22  42.3
3 NA       F            1    52    60  54.3
4 NA       F            0    34    46  34.7

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM