Skip to content
Prev 396584 / 398502 Next

Extract

Val:
I wanted to add here a base R solution to your problem that I realize
you can happily ignore. However, in the course of puzzling over how to
do it using the R native pipe syntax ("|>") , I learned some new stuff
that I thought others might find useful, and it seemed sensible to
keep the code with this thread for comparison.

 I want to acknowledge that in the course of my labor, I posted a
query to R-Help to which Iris Simmons posted a very clever answer that
I would never have figured out myself and that is used below at the
end to change a subset of the names of the modified data frame via a
pipe.

Here's the whole solution starting from your (excellent!) example dat:

   dat <- dat$string |>
      strsplit(" ") |>
      sapply(FUN = \(x)c(x, rep(NA, 5 - length(x)))) |>
      t() |> cbind(dat, ..2 = _)

   ## And Iris's trick for changing a subset of attributes, i.e. the
"names", in a pipe
   dat |> names() |> _[4:8] <- paste0("s", 1:5)

## and here's the result:
Year Sex          string s1   s2   s3   s4   s5
1 2002   F        15 xc Ab 15   xc   Ab <NA> <NA>
2 2003   F              14 14 <NA> <NA> <NA> <NA>
3 2004   M  18 xb 25 35 21 18   xb   25   35   21
4 2005   M           13 25 13   25 <NA> <NA> <NA>
5 2006   M 14 ac 256 AV 35 14   ac  256   AV   35
6 2007   F              11 11 <NA> <NA> <NA> <NA>

As I noted previously, all columns beyond Sex are character

Cheers,
Bert
On Fri, Jul 19, 2024 at 12:26?PM Val <valkremk at gmail.com> wrote: