R:将函数应用于表并合并结果列表

标签 r list merge lapply

我确信这个问题有一个简单的答案,但我找不到它。

我使用 sapply 来总结包含数千个观察结果的表格。对于表的每列(“ASPRU”、“ASPPL”等),每个观测值包含 10 种类型之一(编码为“R”、“B”等):

        ASPRU ASPBG ASPBY ASPCZ ASPHR ASPMK ASPPL ASPPLA ASPSK ASPSL ASPSR ASPSRA
...      
460     I     -     I     Z     I     I     I      -     -     I     I      I
461     I     -     I     -     I     I     I      -     Z     I     -      I
462     I     -     -     Z     I     -     -      -     -     -     -      -
463     Z     Z     Z     -     Z     -     Z      Z     Z     I     I      Z
477     -     -     -     O     -     -     N      -     -     -     -      -
478     -     -     I     -     -     I     I      -     -     -     I      I
479     -     Z     I     -     I     -     -      -     -     -     I      I
480     -     I     I     I     -     -     -      Z     -     -     -      -
482     -     -     -     -     K     -     -      -     -     -     -      K
483     O     -     -     -     O     -     O      -     -     -     -      O
484     O     -     I     -     -     -     N      O     -     A     -      O

我使用 sapply 和 table:

sapply(colnames(NomSuff), function(x) {t(as.table(table(NomSuff[,x])))})

获取每列出现的类型的频率列表。这是一个这样的列表

$ASPRU

   -    A    C    I    K    L    N    O    R    S    V    Z    М 
8352  136  115  697   75   92  147  265   24  142   48   61  193 

$ASPBG

   -    A    C    I    K    L    N    O    S    Z    М 
8899  191  119  388   14  128  183  193   93   76   63 

$ASPBY

   -    A    C    I    K    N    O    S    Z    М 
9194   92   85  385   18  160  213   71   60   69 

等等

请注意,每列使用的符号集不同。现在,显然我想要一个如下表,其中包含每列组合的频率,即

        -       A   C   I   K   L   N   O   S   Z   М   
ASPBG   8899    191 119 388 14  128 183 193 93  76  63  
ASPBY   9194    92  85  385 NA  18  160 213 71  60  69  

(更好的是,用 0 而不是 NA)。

我找不到办法做到这一点。我尝试了多种方式进行合并,但我想问题是我无法找到如何将列表转换为适当的合并格式。

最佳答案

读取您的数据:

df <- read.table(text='ASPRU ASPBG ASPBY ASPCZ ASPHR ASPMK ASPPL ASPPLA ASPSK ASPSL ASPSR ASPSRA
460     I     -     I     Z     I     I     I      -     -     I     I      I
461     I     -     I     -     I     I     I      -     Z     I     -      I
462     I     -     -     Z     I     -     -      -     -     -     -      -
463     Z     Z     Z     -     Z     -     Z      Z     Z     I     I      Z
477     -     -     -     O     -     -     N      -     -     -     -      -
478     -     -     I     -     -     I     I      -     -     -     I      I
479     -     Z     I     -     I     -     -      -     -     -     I      I
480     -     I     I     I     -     -     -      Z     -     -     -      -
482     -     -     -     -     K     -     -      -     -     -     -      K
483     O     -     -     -     O     -     O      -     -     -     -      O
484     O     -     I     -     -     -     N      O     -     A     -      O', header=TRUE, stringsAsFactors=T)

将所有内容转换为因子、rbind:

do.call(rbind,lapply(df, function(x) table(factor(x, levels=c(levels(unlist(df)))))))

结果:

        -   I   O   Z   K   N   A
ASPRU   5   3   2   1   0   0   0
ASPBG   8   1   0   2   0   0   0
ASPBY   4   6   0   1   0   0   0
ASPCZ   7   1   1   2   0   0   0
ASPHR   4   4   1   1   1   0   0
ASPMK   8   3   0   0   0   0   0
ASPPL   4   3   1   1   0   2   0
ASPPLA  8   0   1   2   0   0   0
ASPSK   9   0   0   2   0   0   0
ASPSL   7   3   0   0   0   0   1
ASPSR   7   4   0   0   0   0   0
ASPSRA  3   4   2   1   1   0   0   

关于R:将函数应用于表并合并结果列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19491140/

相关文章:

java - 连接两个对象数组的最有效方法

merge - 用于组成员身份的 MailChimp 合并标签

r - 将宽图像包装成几行

r - 外循环的并行化在 REvolution 中有效,但在普通 R 中无效

Java - 生成特定数字的随机范围而不重复这些数字 - 如何?

python:如何计算两个单词列表的余弦相似度?

sql-server - T-SQL 合并两个逗号分隔的列

r - 如何从循环中的列表创建 R 数据框

ggplot2中旋转轴标题和调整缩放比例

python - python 将二维数组合并到列表中