[R] Convert list with missing values to dataFrame
arun
smartpink111 at yahoo.com
Tue Aug 13 22:56:49 CEST 2013
Hi,
You could try:
tmp[,1]<- as.character(tmp[,1])
tmp[,1][-grep(",",tmp[,1])]<-paste0(",,",tmp[,1][-grep(",",tmp[,1])])
tmp2<-data.frame(read.table(text=tmp[,1],sep=",",header=FALSE,stringsAsFactors=FALSE),rID=tmp[,2],stringsAsFactors=FALSE)
colnames(tmp2)[1:3]<-paste("sID",letters[1:3],sep=".")
tmp2
# sID.a sID.b sID.c rID
#1 NA NA a shr1125
#2 1 2 3 bwr331
#3 NA NA b bwr330
#4 4 5 6 vjhr1022
BTW,
data.frame(sID,rID,stringsAsFactors=FALSE)#cbind is not needed. In this case, it is okay,
# sID rID
#1 a shr1125
#2 1,2,3 bwr331
#3 b bwr330
#4 4,5,6 vjhr1022
#But if they were of different class:
str(data.frame(cbind(sID,Col2=1:4),stringsAsFactors=FALSE))
#'data.frame': 4 obs. of 2 variables:
# $ sID : chr "a" "1,2,3" "b" "4,5,6"
# $ Col2: chr "1" "2" "3" "4"
str(data.frame(sID,Col2=1:4,stringsAsFactors=FALSE))
#'data.frame': 4 obs. of 2 variables:
# $ sID : chr "a" "1,2,3" "b" "4,5,6"
# $ Col2: int 1 2 3 4
A.K.
----- Original Message -----
From: Steven Ranney <steven.ranney at gmail.com>
To: "r-help at r-project.org" <r-help at r-project.org>
Cc:
Sent: Tuesday, August 13, 2013 3:09 PM
Subject: [R] Convert list with missing values to dataFrame
I have a dataFrame
sID <- c("a", "1,2,3", "b", "4,5,6")
rID <- c("shr1125", "bwr331", "bwr330", "vjhr1022")
tmp <- data.frame(cbind(sID,rID))
but I need to split tmp$sID into three different columns, filling locations
where tmp$sID has only one value with NA.
I can split tmp$sID by the comma
tmp.1 <- strsplit(tmp$sID, ",")
but I can't figure out how to convert the resulting list into a dataFrame.
Ideally, tmp will become four columns wide, something like
sID.a sID.b sID.c rID
NA NA a shr1125
1 2 3 bwr331
NA NA b bwr330
4 5 6 vjhr1022
Thoughts or suggestions?
I tried
havecomma - grep(',', tmp$sID)
for( i in 1:nrow(tmp)){
if (!(tmp[i,] %in% havecomma)){
tmp$sID[i] <- paste(', ,', tmp$sID[i], sep="")
}
}
and thought that I might be able to force the list into a dataframe once
each component had three items, but it just seemed to apply the paste()
function to everything which gave me a list with varying numbers of items.
I'm stuck.
Thanks for your help -
SR
Steven H. Ranney
[[alternative HTML version deleted]]
______________________________________________
R-help at 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.
More information about the R-help
mailing list