[英]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.