创建列以帮助在r dataframe中聚合

创建列以帮助在r dataframe中聚合,r,dataframe,R,Dataframe,我需要为R dataframe构造一个新列,这将有助于聚合 首先,我有一些向量: vector1 <- c("ITEM11","ITEM12","ITEM13") vector2 <- c("ITEM21","ITEM22","ITEM32") vector1像这样的东西应该可以做到: vector1 <- c("ITEM11","ITEM12","ITEM13") vector2 <- c("ITEM21","ITEM22","ITEM32") d <- da

我需要为R dataframe构造一个新列,这将有助于聚合

首先,我有一些向量:

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

vector1像这样的东西应该可以做到:

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

vector1根据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]}
名称向量
for(i in regList){DF$AGGVAR[DF$VAR %in i] <- i}
vectorGHI <- c("ITEM11","ITEM12","ITEM13")
vectorJKL <- c("ITEM21","ITEM22","ITEM32")
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]
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]}