如何从多列创建字符向量?

时间:2014-02-26 21:20:34

标签: database r loops

目前,我正在尝试浏览数据库的精选几列。列包含部件号,并且在放入向量之前需要删除一些部件名称。我可以使用以下循环为一列执行此操作。但是,我希望能够遍历我想要的所有列,而无需为每列复制循环。

Ordered = NULL

for (i in x1$V4) {
   if (i != as.character("PartX")) #if statement of i is not equal to PartX
   Ordered[i] <- i #puts i in new vector
}

z=data.frame(table(Ordered))

我希望能够使用table为所有部件号创建表格。我尝试通过apply执行此操作,但效果不佳。我知道这段代码可以工作,我只需要在多列上扩展它。

这就是我的数据集目前的样子。

#   V4   V5    V6    V7    V8
# PartA PartE PartC PartX PartX
# PartC PartX PartX PartX PartX
# PartF PartB PartE PartD PartA
# PartE PartA PartC PartX PartX
# PartA PartE PartD PartX PartX
# PartB PartA PartC PartF PartX

这就是我想要的最新矢量/数据集最终结果。

#   V1
# PartA
# PartC
# PartF
# PartE
# PartA
# PartB
# PartE
# PartB
# PartA
# PartE
# PartA
# PartC
# PartE
# PartC
# PartD
# PartC
# PartD
# PartF
# PartA

1 个答案:

答案 0 :(得分:0)

这将计算所有部分(不包括PartX,或者至少为该部分返回0,但实际上,你可以将它留在其中)。这是使用x1版本,包含5列和6个潜在部分,包括“PartX”:

do.call(cbind, lapply(x1, function(col) table(col[col != "PartX"])))

#       V1 V2 V3 V4 V5
# PartA  1  0  2  1  1
# PartB  2  2  2  1  0
# PartC  1  3  3  3  1
# PartD  3  0  1  1  3
# PartE  0  4  0  4  5
# PartX  0  0  0  0  0    

我们用它作为输入:

#       V1    V2    V3    V4    V5
# 1  PartB PartB PartX PartC PartE
# 2  PartC PartB PartB PartD PartD
# 3  PartD PartE PartD PartC PartE
# 4  PartX PartC PartA PartB PartD
# 5  PartB PartE PartB PartE PartD
# 6  PartX PartC PartC PartE PartE
# 7  PartX PartE PartA PartE PartA
# 8  PartD PartX PartC PartA PartC
# 9  PartD PartC PartX PartE PartE
# 10 PartA PartE PartC PartC PartE

由...生成:

set.seed(1)
vals <- c(paste0("Part", LETTERS[1:5]), "PartX")
x1 <- setNames(
  as.data.frame(
    replicate(5, factor(sample(vals, 10, r=T), levels=vals), simplify=F)
  ), 
  paste0("V", 1:5)
)