Note: > levels(factor(c(0,0,1))) ## just gives you the levels attribute [1] "0" "1" > as.character(factor(c(0,0,1))) ## gives you the level of each value in the vector [1] "0" "0" "1"
Does that answer your question or have I misunderstood. Cheers, Bert On Tue, Apr 2, 2024 at 12:00 AM Kimmo Elo <kimmo....@utu.fi> wrote: > Hi, > > why would this simple procedure not work? > > --- snip --- > mydf <- data.frame(id_station = 1234, string_data = c(2024, 12, 1, 0, 0), > rainfall_value= 55) > > mydf$string_data <- as.factor(mydf$string_data) > > values<-as.integer(levels(mydf$string_data)) > > for (i in 1:length(values)) { > assign(paste("VAR_", i, sep=""), values[i]) > } > > --- snip --- > > Best, > > Kimmo > > to, 2024-03-28 kello 14:17 +0000, Ebert,Timothy Aaron kirjoitti: > > Here are some pieces of working code. I assume you want the second one or > > the third one that is functionally the same but all in one statement. I > > do not understand why it is a factor, but I will assume that there is a > > current and future reason for that. This means I cannot alter the > > string_data variable, or you can simplify by not making the variable a > > factor only to turn it back into character. > > > > mydf <- data.frame(id_station = 1234, string_data = c(2024, 12, 1, 0, 0), > > rainfall_value= 55) > > mydf$string_data <- as.factor(mydf$string_data) > > > > mydf <- data.frame(id_station = 1234, string_data = "2024, 12, 1, 0, 0", > > rainfall_value= 55) > > mydf$string_data <- as.factor(mydf$string_data) > > > > mydf <- data.frame(id_station = 1234, string_data = as.factor("2024, 12, > > 1, 0, 0"), rainfall_value= 55) > > > > mydf <- data.frame(id_station = 1234, string_data = as.factor("2024, 12, > > 1, 0, 0"), rainfall_value= 55) > > mydf$string_data2 <- as.character(mydf$string_data) > > > > #I assume there are many records in the data frame and your example is > > for demonstration only. > > #I cannot assume that all records are the same, though you may be able to > > simplify if that is true. > > #Split the string based on commas. > > split_values <- strsplit(mydf$string_data2, ",") > > > > # find the maximum string length > > max_length <- max(lengths(split_values)) > > > > # Add new variables to the data frame > > for (i in 1:max_length) { > > new_var_name <- paste0("VAR_", i) > > mydf[[new_var_name]] <- sapply(split_values, function(x) > > ifelse(length(x) >= i, x[i], NA)) > > } > > > > # Convert to numeric > > for (i in 1:max_length) { > > new_var_name <- paste0("VAR_", i) > > mydf[[new_var_name]] <- as.numeric(mydf[[new_var_name]]) > > } > > # remove trash > > mydf <- mydf[,-4] > > # Provide more useful names > > colnames(mydf) <- c("id_station", "string_data", "rainfall_mm", "Year", > > "Month", "Day", "hour", "minute") > > > > Regards, > > Tim > > > > -----Original Message----- > > From: R-help <r-help-boun...@r-project.org> On Behalf Of Stefano Sofia > > Sent: Thursday, March 28, 2024 7:48 AM > > To: Fabio D'Agostino <dagostinof...@gmail.com>; r-help@R-project.org > > Subject: Re: [R] split a factor into single elements > > > > [External Email] > > > > Sorry for my hurry. > > > > The correct reproducible code is different from the initial one. The > > correct example is > > > > > > mydf <- data.frame(id_station = 1234, string_data = as.factor(2024, 12, > > 1, 0, 0), rainfall_value= 55) > > > > > > In this case mydf$string_data is a factor, but of length 1 (and not 5 > > like in the initial example). > > > > Therefore the suggestion offered by Fabio does not work. > > > > > > Any suggestion? > > > > Sorry again for my mistake > > > > Stefano > > > > > > > > (oo) > > --oOO--( )--OOo-------------------------------------- > > Stefano Sofia PhD > > Civil Protection - Marche Region - Italy Meteo Section Snow Section Via > > del Colle Ameno 5 > > 60126 Torrette di Ancona, Ancona (AN) > > Uff: +39 071 806 7743 > > E-mail: stefano.so...@regione.marche.it > > ---Oo---------oO---------------------------------------- > > > > > > ________________________________ > > Da: Fabio D'Agostino <dagostinof...@gmail.com> > > Inviato: gioved 28 marzo 2024 12:20 > > A: Stefano Sofia; r-help@R-project.org > > Oggetto: Re: [R] split a factor into single elements > > > > > > Non si ricevono spesso messaggi di posta elettronica da > > dagostinof...@gmail.com. Informazioni sul perch > > importante<https://aka.ms/LearnAboutSenderIdentification> > > > > Hi Stefano, > > maybe something like this can help you? > > > > myfactor <- as.factor(c(2024, 2, 1, 0, 0)) > > > > # Convert factor values to integers > > first_element <- as.integer(as.character(myfactor)[1]) > > second_element <- as.integer(as.character(myfactor)[2]) > > third_element <- as.integer(as.character(myfactor)[3]) > > > > # Print the results > > first_element > > [1] 2024 > > second_element > > [1] 2 > > third_element > > [1] 1 > > > > # Check the type of the object > > typeof(first_element) > > [1] "integer" > > > > Fabio > > > > Il giorno gio 28 mar 2024 alle ore 11:29 Stefano Sofia > > <stefano.so...@regione.marche.it<mailto:stefano.so...@regione.marche.it > >> > > ha scritto: > > Dear R-list users, > > > > forgive me for this silly question, I did my best to find a solution with > > no success. > > > > Suppose I have a factor type like > > > > > > myfactor <- as.factor(2024, 2, 1, 0, 0) > > > > > > There are no characters (and therefore strsplit for eample does not > > work). > > > > I need to store separately the 1st, 2nd and 3rd elements as integers. How > > can I do? > > > > > > Thank you for your help > > > > Stefano > > > > > > (oo) > > --oOO--( )--OOo-------------------------------------- > > Stefano Sofia PhD > > Civil Protection - Marche Region - Italy Meteo Section Snow Section Via > > del Colle Ameno 5 > > 60126 Torrette di Ancona, Ancona (AN) > > Uff: +39 071 806 7743 > > E-mail: > > stefano.so...@regione.marche.it<mailto:stefano.so...@regione.marche.it> > > ---Oo---------oO---------------------------------------- > > > > ________________________________ > > > > AVVISO IMPORTANTE: Questo messaggio di posta elettronica pu contenere > > informazioni confidenziali, pertanto destinato solo a persone > > autorizzate alla ricezione. I messaggi di posta elettronica per i client > > di Regione Marche possono contenere informazioni confidenziali e con > > privilegi legali. Se non si il destinatario specificato, non leggere, > > copiare, inoltrare o archiviare questo messaggio. Se si ricevuto questo > > messaggio per errore, inoltrarlo al mittente ed eliminarlo completamente > > dal sistema del proprio computer. Ai sensi dell'art. 6 della DGR n. > > 1394/2008 si segnala che, in caso di necessit ed urgenza, la risposta al > > presente messaggio di posta elettronica pu essere visionata da persone > > estranee al destinatario. > > IMPORTANT NOTICE: This e-mail message is intended to be received only by > > persons entitled to receive the confidential information it may contain. > > E-mail messages to clients of Regione Marche may contain information that > > is confidential and legally privileged. Please do not read, copy, > > forward, or store this message unless you are an intended recipient of > > it. If you have received this message in error, please forward it to the > > sender and delete it completely from your computer system. > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help@r-project.org<mailto:R-help@r-project.org> mailing list -- To > > UNSUBSCRIBE and more, see > > https://stat.ethz.ch/mailman/listinfo/r-help< > https://stat.ethz.ch/mailman/listinfo/r-help > > > > > PLEASE do read the posting guide > > http://www.r-project.org/posting-guide.html< > > http://www.r-project.org/posting-guide.html> > > and provide commented, minimal, self-contained, reproducible code. > > > > ________________________________ > > > > AVVISO IMPORTANTE: Questo messaggio di posta elettronica pu contenere > > informazioni confidenziali, pertanto destinato solo a persone > > autorizzate alla ricezione. I messaggi di posta elettronica per i client > > di Regione Marche possono contenere informazioni confidenziali e con > > privilegi legali. Se non si il destinatario specificato, non leggere, > > copiare, inoltrare o archiviare questo messaggio. Se si ricevuto questo > > messaggio per errore, inoltrarlo al mittente ed eliminarlo completamente > > dal sistema del proprio computer. Ai sensi dell'art. 6 della DGR n. > > 1394/2008 si segnala che, in caso di necessit ed urgenza, la risposta al > > presente messaggio di posta elettronica pu essere visionata da persone > > estranee al destinatario. > > IMPORTANT NOTICE: This e-mail message is intended to be received only by > > persons entitled to receive the confidential information it may contain. > > E-mail messages to clients of Regione Marche may contain information that > > is confidential and legally privileged. Please do not read, copy, > > forward, or store this message unless you are an intended recipient of > > it. If you have received this message in error, please forward it to the > > sender and delete it completely from your computer system. > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help@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. > > ______________________________________________ > R-help@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. > [[alternative HTML version deleted]] ______________________________________________ R-help@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.