2014-11-21 67 views
0

我需要为R数据框构建一个有助于聚合的新列。制作一列以帮助聚合在r数据框中

首先,我有一些载体:其具有柱VAR与包含在载体中的物品

vector1 <- c("ITEM11","ITEM12","ITEM13") 
vector2 <- c("ITEM21","ITEM22","ITEM32") 

和数据帧DF。现在我想要制作新列AGGVAR:

DF$AGGVAR[DF$VAR %in% vector1] <- "vector1" 

这对于少量载体来说是可控制的,但是我想使它更适合更多的载体。我做了

for(i in regList){DF$AGGVAR[DF$VAR %in i] <- i} 

什么仍然需要使这项工作列表

vectorList <- ls(pattern = "^vector") 

和我显然幼稚的尝试?

编辑:我的问题实际上比我第一次提出多毛。这些载体实际上没有整齐的数字后缀,例如:

vectorGHI <- c("ITEM11","ITEM12","ITEM13") 
vectorJKL <- c("ITEM21","ITEM22","ITEM32") 

回答

2

像这样的东西应该做的伎俩:

vector1 <- c("ITEM11","ITEM12","ITEM13") 
vector2 <- c("ITEM21","ITEM22","ITEM32") 

d <- data.frame(var=c(vector1, vector2)) 
L <- mget(ls(patt='^vector')) 
d$aggvar <- paste0('vector', sapply(d$var, grep, L)) 

d 
#  var aggvar 
# 1 ITEM11 vector1 
# 2 ITEM12 vector1 
# 3 ITEM13 vector1 
# 4 ITEM21 vector2 
# 5 ITEM22 vector2 
# 6 ITEM32 vector2 

的替代,这可能有更好的表现:

lookup <- cbind(unlist(L), 
       c(mapply(rep, names(L), sapply(L, length)))) 

d$aggvar <- lookup[match(d$var, lookup[, 1]), 2] 
0

根据jbaums的建议稍作修改,使其完成:

namesVectors <- ls(pattern = "^vector") 
vectorList <- mget(namesVectors) 
# Getting rid of auxiliary prefix 
namesVectors <- substring(namesVectors, 7) 

DF$AGGVAR <- sapply(DF$VAR, grep, vectorList) 
for(i in length(namesVectors)) {DF$AGGVAR[DF$AGGVAR == i] <- namesVectors[i]}