[R] Help with R script
Ulrik Stervbo
ulrik.stervbo at gmail.com
Fri Jul 14 07:09:39 CEST 2017
@Don your solution does not solve Vijayan's scenario 2. I used spread and
gather for that.
An alternative solution to insert mising Fval - picking up with Don's
newtst - is
newtst <- c("FName: fname1", "Fval: Fval1.name1", "FName: fname2", "Fval:
Fval2.name2", "FName: fname3", "FName: fname4", "Fval: fval4.fname4")
newtst_new <- vector(mode = "character", length = sum(grepl("FName",
newtst)) * 2)
newtst_len <- length(newtst)
i <- 1
j <- 1
while(i <= newtst_len){
if(grepl("FName", newtst[i]) & grepl("Fval", newtst[i + 1])){
newtst_new[c(j, j + 1)] <- newtst[c(i, i + 1)]
i <- i + 2
}else{
newtst_new[c(j, j + 1)] <- c(newtst[c(i)], "Fval: ")
i <- i + 1
}
j <- j + 2
}
newtst_new
which is also not very pretty.
HTH
Ulrik
On Thu, 13 Jul 2017 at 16:48 MacQueen, Don <macqueen1 at llnl.gov> wrote:
> Using Ulrik’s example data (and assuming I understand what is wanted),
> here is what I would do:
>
> ex.dat <- c("FName: fname1", "Fval: Fval1.name1", "Fval: ", "FName:
> fname2", "Fval: Fval2.name2", "FName: fname3")
> tst <- data.frame(x = ex.dat, stringsAsFactors=FALSE)
>
> sp <- strsplit(tst$x, ':', fixed=TRUE)
> chk <- unlist(lapply(sp, function(txt) txt[2] != ' '))
> newtst <- tst[chk,,drop=FALSE]
>
> This both assumes and requires that ALL of the rows are structured as in
> the example data in the original question.
> For example:
> if any row is missing the “:”, it will fail.
> If the “:” is not followed by a space character it may fail (I have not
> checked)
>
> -Don
>
> --
> Don MacQueen
>
> Lawrence Livermore National Laboratory
> 7000 East Ave., L-627
> Livermore, CA 94550
> 925-423-1062
>
>
> On 7/13/17, 6:47 AM, "R-help on behalf of Ulrik Stervbo" <
> r-help-bounces at r-project.org on behalf of ulrik.stervbo at gmail.com> wrote:
>
> Hi Vijayan,
>
> one way going about it *could* be this:
>
> library(dplyr)
> library(tidyr)
> library(purrr)
>
> ex_dat <- c("FName: fname1", "Fval: Fval1.name1", "Fval: ", "FName:
> fname2", "Fval: Fval2.name2", "FName: fname3")
>
> data.frame(x = ex_dat) %>%
> separate(x, c("F1", "F2"), sep = ": ") %>%
> filter(F2 != "") %>%
> group_by(F1) %>%
> mutate(indx = row_number()) %>%
> spread(F1, F2, fill = "") %>%
> gather(F1, F2, FName, Fval) %>%
> arrange(indx) %>%
> mutate(x = paste(F1, F2, sep = ": ")) %>%
> select(x) %>%
> flatten_chr()
>
> It is not particularly nice or clever, but it gets the job done using
> R.
>
> HTH
> Ulrik
>
> On Thu, 13 Jul 2017 at 13:13 Vijayan Padmanabhan <V.Padmanabhan at itc.in
> >
> wrote:
>
> >
> > Dear R-help Group
> >
> >
> > Scenario 1:
> > I have a text file running to 1000 of lines...that
> > is like as follows:
> >
> > [922] "FieldName: Wk3PackSubMonth"
> >
> > [923] "FieldValue: Apr"
> >
> > [924] "FieldName: Wk3PackSubYear"
> >
> > [925] "FieldValue: 2017"
> >
> > [926] "FieldName: Wk3Code1"
> >
> > [927] "FieldValue: "
> >
> > [928] "FieldValue: K4"
> >
> > [929] "FieldName: Wk3Code2"
> >
> > [930] "FieldValue: "
> >
> > [931] "FieldValue: Q49"
> >
> >
> > I want this to be programmatically corrected to
> > read as follows: (All consecutive lines starting
> > with FieldValue is cleaned to retain only one
> > line)
> >
> > [922] "FieldName: Wk3PackSubMonth"
> >
> > [923] "FieldValue: Apr"
> >
> > [924] "FieldName: Wk3PackSubYear"
> >
> > [925] "FieldValue: 2017"
> >
> > [926] "FieldName: Wk3Code1"
> >
> > [927] "FieldValue: K4"
> >
> > [928] "FieldName: Wk3Code2"
> >
> > [929] "FieldValue: Q49"
> >
> > Scenario 2:
> > In the same file, in some instances, the lines
> > could be as follows: in this case, wherever a line
> > is beginning with FieldName and the subsequent
> > line is not displaying a FieldValue, I would want
> > to programmatically identify such lines and insert
> > FieldValue (as blank).
> >
> > [941] "FieldName: Wk3Code6"
> >
> > [942] "FieldValue: "
> >
> > [943] "FieldName: Wk3Code7"
> >
> > [944] "FieldValue: "
> >
> > [945] "FieldName: Wk3PackWSColorStiffRemarkCode1"
> >
> > [946] "FieldName: Wk3PackWSColorWrappRemarkCode1"
> >
> > [947] "FieldName:
> > Wk3PackWSDelamiStiffRemarkCode1"
> >
> >
> > ie in the above, it should be replaced as
> >
> > [941] "FieldName: Wk3Code6"
> >
> > [942] "FieldValue: "
> >
> > [943] "FieldName: Wk3Code7"
> >
> > [944] "FieldValue: "
> >
> > [945] "FieldName: Wk3PackWSColorStiffRemarkCode1"
> > [946] "FieldValue: "
> >
> > [947] "FieldName: Wk3PackWSColorWrappRemarkCode1"
> > [948] "FieldValue: "
> >
> > [949] "FieldName:
> > Wk3PackWSDelamiStiffRemarkCode1"
> > [950] "FieldValue: "
> >
> >
> > Can anybod suggest how to acheive this in R?
> >
> > Thanks for your time.
> > Regards
> > VP
> >
> >
> >
> > Disclaimer:\ This Communication is for the exclusive
> use...{{dropped:8}}
> >
> > ______________________________________________
> > 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.
> >
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> 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.
>
>
>
[[alternative HTML version deleted]]
More information about the R-help
mailing list