R 如何合并向量并计算每列的因子发生率
我试图将多个字符列表(A、B、C、D、E)合并到一个数据帧或矩阵中。它们都有相同数量的元素-20。它们看起来像这样: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
> 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”。不需要第二列列表
:添加一个“id”列,表示值在向量中的位置(从1到20)。值1到20被循环使用cbind(id=1:20,)
:仅将“id”和“values”列中的值制成表格表格([c(“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))))