首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的关联数据帧

R中的关联数据帧
EN

Stack Overflow用户
提问于 2022-05-18 21:35:08
回答 1查看 23关注 0票数 0

我试图在病毒和它们的宿主之间建立一个关联矩阵。我有一个数据框架,其中包含两列(病原体和宿主),如下所示:

代码语言:javascript
复制
pathogen <- c("A_virus", "B_virus","B_virus", "C_virus","C_virus", "D_virus", "D_virus")
host <- c("Human", "Human","Dog", "Lion", "Human", "Gorilla", "Dog")
FoundIn <- data.frame(pathogen,host)

FoundIn

    pathogen  host
[1] A_virus   Human 
[2] B_virus   Human
[3] B_virus   Dog
[4] C_virus   Lion
[5] C_virus   Human
[6] D_virus   Gorilla
[7] D_virus   Dog

我想要一个包含关联为1而非关联为0的数据文件,如下所示:

代码语言:javascript
复制
         Human  Dog  Lion  Gorilla  
A_virus   1      0     0      0   
B_virus   1      1     0      0  
C_virus   1      0     1      0  
D_virus   0      1     0      1   

有什么简单的方法吗?

EN

回答 1

Stack Overflow用户

发布于 2022-05-18 21:38:02

使用xtabs

代码语言:javascript
复制
xtabs(~ pathogen + host, data = FoundIn)
#          host
# pathogen  Dog Gorilla Human Lion
#   A_virus   0       0     1    0
#   B_virus   1       0     1    0
#   C_virus   0       0     1    1
#   D_virus   1       1     0    0

代码语言:javascript
复制
table(FoundIn$pathogen, FoundIn$host) # same output

注意,这不是data.frame,而是类table。为了将该格式转换为data.frame,您必须使用行名。这当然是可行的

代码语言:javascript
复制
tbl <- xtabs(~ pathogen + host, data = FoundIn)
class(tbl) <- "matrix"
as.data.frame(tbl)
#         Dog Gorilla Human Lion
# A_virus   0       0     1    0
# B_virus   1       0     1    0
# C_virus   0       0     1    1
# D_virus   1       1     0    0

但是要知道,许多工具(特别是dplyrtidyverse元包中的其他包)忽略并有时故意删除行名,因此经常不鼓励使用它们,建议将它们移到一个显式列(例如,使用tibble::rownames_to_column,在基本R中也很容易)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72296265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档