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]]