Dividir la columna de cadena del marco de datos en varias columnas
Me gustaría tomar datos del formulario.
before = data.frame(attr = c(1,30,4,6), type=c('foo_and_bar','foo_and_bar_2'))
attr type
1 1 foo_and_bar
2 30 foo_and_bar_2
3 4 foo_and_bar
4 6 foo_and_bar_2
y utilícelo split()
en la columna " type
" de arriba para obtener algo como esto:
attr type_1 type_2
1 1 foo bar
2 30 foo bar_2
3 4 foo bar
4 6 foo bar_2
Se me ocurrió algo increíblemente complejo que involucraba alguna forma de apply
eso que funcionó, pero desde entonces lo perdí. Parecía demasiado complicado para ser la mejor manera. Puedo usar strsplit
lo siguiente, pero no tengo claro cómo volver a colocarlo en 2 columnas en el marco de datos.
> strsplit(as.character(before$type),'_and_')
[[1]]
[1] "foo" "bar"
[[2]]
[1] "foo" "bar_2"
[[3]]
[1] "foo" "bar"
[[4]]
[1] "foo" "bar_2"
Gracias por cualquier consejo. Todavía no he asimilado las listas R.
Aceptado
Usarstringr::str_split_fixed
library(stringr)
str_split_fixed(before$type, "_and_", 2)
Puedes usar el tidyr
paquete.
before <- data.frame(
attr = c(1, 30 ,4 ,6 ),
type = c('foo_and_bar', 'foo_and_bar_2')
)
library(tidyr)
before |>
separate_wider_delim(type, delim = "_and_", names = c("foo", "bar"))
# # A tibble: 4 × 3
# attr foo bar
# <dbl> <chr> <chr>
# 1 1 foo bar
# 2 30 foo bar_2
# 3 4 foo bar
# 4 6 foo bar_2
(O usar versiones anteriores de tidyr
)
before %>%
separate(type, c("foo", "bar"), "_and_")
## attr foo bar
## 1 1 foo bar
## 2 30 foo bar_2
## 3 4 foo bar
## 4 6 foo bar_2