2014-11-21 65 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]}