簡體   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