r - subseting in a for loop -
my dataset has 34,000 rows , 353 columns. 1 column location , has 11,000 unique values. want subset dataset within loop. can creating new data frame each subset, want subsets form single data frame. have included sample dataset below
structure(list(x = structure(c(1l, 1l, 1l, 1l, 3l, 3l, 3l, 2l, 3l), .label = c("car", "dog", "house"), class = "factor"), y = c(20l, 20l, 20l, 20l, 410l, 410l, 410l, 410l, 60l), z = structure(c(1l, 3l, 8l, 1l, 7l, 5l, 2l, 4l, 6l), .label = c("argentina", "berlin germany", "buenos aires argentina", "dublin ireland", "from austria", "germany", "in transit germany", "river plate argentina"), class = "factor"), k = structure(c(1l, 1l, 1l, 1l, 1l, 1l, 1l, 1l, 1l), .label = "a", class = "factor")), .names = c("x", "y", "z", "k"), class = "data.frame", row.names = c(na, -9l))
i can use following code create new data frames
l=c("argentina","ireland") for(i in l){ assign(paste("newdata",i,sep=""), subset(testl[which(grepl(i,testl$z)& !grepl("in transit",testl$z)&!grepl("from",testl$z)),], select=c("x","y","z")))}
however want create single new dataframe hold subsets. have tried following code
d<-data.frame() for(i in l){d<-rbind(d,c( subset(testl[which(grepl(i,testl$z) & !grepl("in transit",testl$z) & !grepl("from",testl$z)),], select=c("x","y","z")))}
i following errors
warning messages: 1: in `[<-.factor`(`*tmp*`, ri, value = "dog") : invalid factor level, na generated 2: in `[<-.factor`(`*tmp*`, ri, value = "dublin ireland") : invalid factor level, na generated
i have attempted convert factors characters no success. appreciated
i think making life rather difficult using assign
here , trying store subsets in separate data frames. try more this:
l <- c("argentina","ireland") res <- setnames(vector("list",length(l)),l) (i in seq_along(l)){ res[[i]] <- dat[grepl(l[i],dat$z) & !grepl("in transit",dat$z) & !grepl("from",dat$z),c("x","y","z")] } > res $argentina x y z 1 car 20 argentina 2 car 20 buenos aires argentina 3 car 20 river plate argentina 4 car 20 argentina $ireland x y z 8 dog 410 dublin ireland > do.call("rbind",res) x y z argentina.1 car 20 argentina argentina.2 car 20 buenos aires argentina argentina.3 car 20 river plate argentina argentina.4 car 20 argentina ireland dog 410 dublin ireland
Comments
Post a Comment