我在此专栏中有一个名为“ encuesta”的df
Orientación prioritaria
<chr>
Gastroenterología clinica;Endoscopia digestiva;Motilidad y Neurogastro
Gastroenterología clinica;Endoscopia digestiva;Motilidad y Neurogastro
Gastroenterología clinica;Endoscopia digestiva;Motilidad y Neurogastro
Gastroenterología clinica;Endoscopia digestiva
Motilidad y Neurogastro
Gastroenterología clinica;Motilidad y Neurogastro
我想根据以“;”分隔的值创建新列 在每一行
我已经尝试过这样的事情,例如:
encuesta$`Gastroenterología clínica` <- encuesta$`Orientación prioritaria` %in% str_detect(encuesta$`Orientación prioritaria`, regex("Gastroenterología"))
它创建了一个新列,Gastroenterología clínica
但它对所有观察结果进行了评估,得出FALSE,我不明白为什么。
separate()
在tidyr
(tidyverse
)中尝试这种方法:
library(tidyverse)
#Separate
df2 <- df %>% separate(col = V1,into = c('a','b','c'),sep = ';')
输出:
a b c
1 Gastroenterología clinica Endoscopia digestiva Motilidad y Neurogastro
2 Gastroenterología clinica Endoscopia digestiva Motilidad y Neurogastro
3 Gastroenterología clinica Endoscopia digestiva Motilidad y Neurogastro
4 Gastroenterología clinica Endoscopia digestiva <NA>
5 Motilidad y Neurogastro <NA> <NA>
6 Gastroenterología clinica Motilidad y Neurogastro <NA>
使用了一些数据:
#Data
df <- structure(list(V1 = c("Gastroenterología clinica;Endoscopia digestiva;Motilidad y Neurogastro",
"Gastroenterología clinica;Endoscopia digestiva;Motilidad y Neurogastro",
"Gastroenterología clinica;Endoscopia digestiva;Motilidad y Neurogastro",
"Gastroenterología clinica;Endoscopia digestiva", "Motilidad y Neurogastro",
"Gastroenterología clinica;Motilidad y Neurogastro")), class = "data.frame", row.names = c(NA,
-6L))
更新:为了使每个值一个变量在此处,代码:
#Code
df %>% separate_rows(V1,sep=';') %>%
mutate(V=paste0('V',1:n())) %>%
pivot_wider(names_from = V,values_from=V1)
输出:
# A tibble: 1 x 14
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 Gastro~ Endos~ Motili~ Gastro~ Endo~ Motil~ Gastr~ Endo~ Motil~ Gastr~ Endo~ Motil~ Gastr~ Motil~
更新2:为了每个类都有一个变量,请尝试以下操作:
#Code 2
df %>% mutate(id=1:n()) %>% separate_rows(V1,sep=';') %>%
#group_by(V1) %>%
mutate(var=1) %>%
pivot_wider(names_from = V1,values_from=var) %>%
replace(is.na(.),0) %>% select(-id)
输出:
# A tibble: 6 x 3
`Gastroenterología clinica` `Endoscopia digestiva` `Motilidad y Neurogastro`
<dbl> <dbl> <dbl>
1 1 1 1
2 1 1 1
3 1 1 1
4 1 1 0
5 0 0 1
6 1 0 1
如果需要总计,请尝试以下操作:
#Code 3
df %>% mutate(id=1:n()) %>% separate_rows(V1,sep=';') %>%
#group_by(V1) %>%
mutate(var=1) %>%
pivot_wider(names_from = V1,values_from=var) %>% select(-id) %>%
summarise_all(.funs = sum,na.rm=T)
输出:
# A tibble: 1 x 3
`Gastroenterología clinica` `Endoscopia digestiva` `Motilidad y Neurogastro`
<dbl> <dbl> <dbl>
1 5 4 5
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句