我正在尝试从一种特定类型的数据创建一个列联表。这可以通过循环等实现……但是由于我的最终表将包含10E5以上的单元格,因此我正在寻找一个预先存在的函数。

我的初始数据如下:

PLANT                  ANIMAL                          INTERACTIONS
---------------------- ------------------------------- ------------
Tragopogon_pratensis   Propylea_quatuordecimpunctata         1
Anthriscus_sylvestris  Rhagonycha_nigriventris               3
Anthriscus_sylvestris  Sarcophaga_carnaria                   2
Heracleum_sphondylium  Sarcophaga_carnaria                   1
Anthriscus_sylvestris  Sarcophaga_variegata                  4
Anthriscus_sylvestris  Sphaerophoria_interrupta_Gruppe       3
Cerastium_holosteoides Sphaerophoria_interrupta_Gruppe       1

我想创建一个像这样的表:
                       Propylea_quatuordecimpunctata Rhagonycha_nigriventris Sarcophaga_carnaria Sarcophaga_variegata Sphaerophoria_interrupta_Gruppe
---------------------- ----------------------------- ----------------------- ------------------- -------------------- -------------------------------
Tragopogon_pratensis   1                             0                       0                   0                    0
Anthriscus_sylvestris  0                             3                       2                   4                    3
Heracleum_sphondylium  0                             0                       1                   0                    0
Cerastium_holosteoides 0                             0                       0                   0                    1

也就是说,所有植物物种排成一排,所有动物物种排成一列,有时没有相互作用(而我的初始数据仅列出了发生的相互作用)。

最佳答案

在基数R中,使用tablextabs:

with(warpbreaks, table(wool, tension))

    tension
wool L M H
   A 9 9 9
   B 9 9 9

xtabs(~wool+tension, data=warpbreaks)

    tension
wool L M H
   A 9 9 9
   B 9 9 9
gmodels软件包具有一个CrossTable函数,该函数提供的输出类似于SPSS或SAS用户期望的输出:
library(gmodels)
with(warpbreaks, CrossTable(wool, tension))


   Cell Contents
|-------------------------|
|                       N |
| Chi-square contribution |
|           N / Row Total |
|           N / Col Total |
|         N / Table Total |
|-------------------------|


Total Observations in Table:  54


             | tension
        wool |         L |         M |         H | Row Total |
-------------|-----------|-----------|-----------|-----------|
           A |         9 |         9 |         9 |        27 |
             |     0.000 |     0.000 |     0.000 |           |
             |     0.333 |     0.333 |     0.333 |     0.500 |
             |     0.500 |     0.500 |     0.500 |           |
             |     0.167 |     0.167 |     0.167 |           |
-------------|-----------|-----------|-----------|-----------|
           B |         9 |         9 |         9 |        27 |
             |     0.000 |     0.000 |     0.000 |           |
             |     0.333 |     0.333 |     0.333 |     0.500 |
             |     0.500 |     0.500 |     0.500 |           |
             |     0.167 |     0.167 |     0.167 |           |
-------------|-----------|-----------|-----------|-----------|
Column Total |        18 |        18 |        18 |        54 |
             |     0.333 |     0.333 |     0.333 |           |
-------------|-----------|-----------|-----------|-----------|

关于r - 我如何获得列联表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7442207/

10-13 07:39