I am recoding some data. Many values that should be 1.5 are recorded as 1-2. Some example data and my solution is below. I am curious about better approaches or any other suggestions. Thanks! # example input data myData <- read.table(textConnection("id, v1, v2, v3 a,1,2,3 b,1-2,,3-4 c,,3,4"),header=TRUE,sep=",") closeAllConnections() # the first column is IDs so remove that numdat <- myData[,-1] # function to change dashes: 1-2 to 1.5 myrecode <- function(mycol) { newcol <- mycol newcol <- gsub("1-2","1.5",newcol) newcol <- gsub("2-3","2.5",newcol) newcol <- gsub("3-4","3.5",newcol) newcol <- as.numeric(newcol) } newData <- data.frame(do.call(cbind,lapply(numdat,myrecode)))
Henrique Dallazuanna
2010-May-17 18:54 UTC
[R] suggestions/improvements for recoding strategy
Try this: newData <- sapply(numdat, function(x)lapply(strsplit(as.character(x), '-'), function(.x)mean(as.numeric(.x)))) On Mon, May 17, 2010 at 3:29 PM, Juliet Hannah <juliet.hannah@gmail.com>wrote:> I am recoding some data. Many values that should be 1.5 are recorded > as 1-2. Some example data and my solution is below. I am curious about > better approaches or any other suggestions. Thanks! > > # example input data > > myData <- read.table(textConnection("id, v1, v2, v3 > a,1,2,3 > b,1-2,,3-4 > c,,3,4"),header=TRUE,sep=",") > closeAllConnections() > > # the first column is IDs so remove that > > numdat <- myData[,-1] > > # function to change dashes: 1-2 to 1.5 > > myrecode <- function(mycol) > { > newcol <- mycol > newcol <- gsub("1-2","1.5",newcol) > newcol <- gsub("2-3","2.5",newcol) > newcol <- gsub("3-4","3.5",newcol) > newcol <- as.numeric(newcol) > > } > > newData <- data.frame(do.call(cbind,lapply(numdat,myrecode))) > > ______________________________________________ > R-help@r-project.org mailing list > 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. >-- Henrique Dallazuanna Curitiba-Paraná-Brasil 25° 25' 40" S 49° 16' 22" O [[alternative HTML version deleted]]