Extract
I get no error. Please show the entirety of the code you used that produced the error. Also, are you using a current R version? I am, and if you are not, there might have been changes from your version to mine that caused the error. However, as you were already given satisfactory solutions before, and Gabor has provided you a simple non-piped base R version that is probably better anyway, feel free to ignore my request as a waste of your time. -- Bert
On Sun, Jul 21, 2024 at 9:36?AM Val <valkremk at gmail.com> wrote:
Thank you Bert!
However, the last line of the script.
dat |> names() |> _[4:8] <- paste0("s", 1:5)
is giving me an error as shown below
Error: pipe placeholder can only be used as a named argument
Thank you!
On Sat, Jul 20, 2024 at 7:41?PM Bert Gunter <bgunter.4567 at gmail.com> wrote:
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:
dat
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:
Thank you Jeff and Bert for your help! The components of the string could be nixed (i.e, numeric, character or date). Once that is splitted it would be easy for me to format it accordingly. On Fri, Jul 19, 2024 at 2:10?PM Bert Gunter <bgunter.4567 at gmail.com> wrote:
I did not look closely at the solutions that you were offered, but note that you did not specify in your post whether the numbers in your string were to be character or numeric variables after they are broken out into their own columns. I believe that they are character in the solutions, but you should check this. If you want them as numeric, e.g., for further processing, you will need to convert them. Or vice-versa. Bert On Fri, Jul 19, 2024 at 9:52?AM Val <valkremk at gmail.com> wrote:
Hi All, I want to extract new variables from a string and add it to the dataframe. Sample data is csv file. dat<-read.csv(text="Year, Sex,string 2002,F,15 xc Ab 2003,F,14 2004,M,18 xb 25 35 21 2005,M,13 25 2006,M,14 ac 256 AV 35 2007,F,11",header=TRUE) The string column has a maximum of five variables. Some rows have all and others may not have all the five variables. If missing then fill it with NA, Desired result is shown below, Year,Sex,string, S1, S2, S3 S4,S5 2002,F,15 xc Ab, 15,xc,Ab, NA, NA 2003,F,14, 14,NA,NA,NA,NA 2004,M,18 xb 25 35 21,18, xb, 25, 35, 21 2005,M,13 25,13, 25,NA,NA,NA 2006,M,14 ac 256 AV 35, 14, ac, 256, AV, 35 2007,F,11, 11,NA,NA,NA,NA Any help? Thank you in advance.
______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.