R 如何合并向量并计算每列的因子发生率

R 如何合并向量并计算每列的因子发生率,r,R,我试图将多个字符列表(A、B、C、D、E)合并到一个数据帧或矩阵中。它们都有相同数量的元素-20。它们看起来像这样: > line1 [1] B C C D A B D E C A B E B A D E C C A B Levels: A B C D E > typeof(line1) [1] "integer" > line2 [1] B E E A C E D B B D C C A A E E A A E B Levels: A B C D E > typeo

我试图将多个字符列表(A、B、C、D、E)合并到一个数据帧或矩阵中。它们都有相同数量的元素-20。它们看起来像这样:

> line1
 [1] B C C D A B D E C A B E B A D E C C A B
Levels: A B C D E
> typeof(line1)
[1] "integer"
> line2
 [1] B E E A C E D B B D C C A A E E A A E B
Levels: A B C D E
> typeof(line2)
[1] "integer"
> (...)
> line10
 [1] B E E A C E D B B C D C A A E E C A E B
Levels: A B C D E
其目的是统计所有对象(第1..n行)中每列的摘要出现次数。假设n=10。因此,输出应如下所示(基于上述示例):

我怎么开始?
谢谢

实际上,您要求的是
表格

table(
  cbind(
    id = 1:20,                                   ## index of position of vector element
    stack(
      lapply(mget(ls(pattern = "line\\d+")),     ## collect all "line" vecs in a list
             as.character)))[c("id", "values")]) ## stack doesn't work with factors
#     values
# id   A B C D E
#   1  0 3 0 0 0
#   2  0 0 1 0 2
#   3  0 0 1 0 2
#   4  2 0 0 1 0
#   5  1 0 2 0 0
#   6  0 1 0 0 2
#   7  0 0 0 3 0
#   8  0 2 0 0 1
#   9  0 2 1 0 0
#   10 1 0 1 1 0
#   11 0 1 1 1 0
#   12 0 0 2 0 1
#   13 2 1 0 0 0
#   14 3 0 0 0 0
#   15 0 0 0 1 2
#   16 0 0 0 0 3
#   17 1 0 2 0 0
#   18 2 0 1 0 0
#   19 1 0 0 0 2
#   20 0 3 0 0 0

上述功能:

  • mget
    :将名为
    list1
    list2
    等的所有对象收集到单个
    列表中
  • lappy(,as.character)
    :将
    因子
    s转换为
    字符
    s,因为
    堆栈
    不喜欢
    因子
    s
  • stack
    :创建一个两列的
    data.frame
    版本的
    列表
    ,其中的值存储在一个名为“values”的列中,相关的列表名为“ind”。不需要第二列
  • cbind(id=1:20,)
    :添加一个“id”列,表示值在向量中的位置(从1到20)。值1到20被循环使用
  • 表格([c(“id”,“values”))
    :仅将“id”和“values”列中的值制成表格

您还可以执行以下操作:

t(Reduce("+", lapply(mget(ls(pattern = "line\\d+")), function(x) sapply(x, table))))
t(Reduce("+", lapply(mget(ls(pattern = "line\\d+")), function(x) sapply(x, table))))