R 根据另一个数据库中的条件使用二进制数据生成数据帧

R 根据另一个数据库中的条件使用二进制数据生成数据帧,r,data.table,plyr,binary-data,R,Data.table,Plyr,Binary Data,我有一个大的数据帧,我想根据几个条件对它进行过滤并生成一个二进制数据帧 这是原始数据帧: a1 <- data.frame( ID = c(rep("ID_1",3),rep("ID_2",3)), gene = c("A", "D", "X","D","D","A"), C = c("Q", "R", "S","S","R","Q"), D = c(8, 3, 3, 4, 5, 4), E = sample(c("silent","non-silent"),6,rep

我有一个大的数据帧,我想根据几个条件对它进行过滤并生成一个二进制数据帧

这是原始数据帧:

a1 <- data.frame(
  ID = c(rep("ID_1",3),rep("ID_2",3)),
  gene = c("A", "D", "X","D","D","A"),
  C = c("Q", "R", "S","S","R","Q"),
  D = c(8, 3, 3, 4, 5, 4),
  E = sample(c("silent","non-silent"),6,replace=T)
)
我现在制作了一个空数据框,ID作为列,基因作为行:

dt=as.data.frame(matrix(NA, length(c(levels(a1$gene))), length(c(levels(a1$ID)))+1))
colnames(dt)[1] <- "gene"
dt[,"gene"]=c(levels(a1$gene))
colnames(dt)[-1]=levels(a1$ID)

    gene    ID_1    ID_2
1   A   NA  NA
2   D   NA  NA
3   X   NA  NA
dt=as.data.frame(矩阵(NA,长度(c(水平(a1$gene))),长度(c(水平(a1$ID)))+1))

colnames(dt)[1]查看每个ID是否存在一个基因:

dt$ID_1 <- dt$gene %in% a1[a1$ID == "ID_1", ]$gene
dt$ID_2 <- dt$gene %in% a1[a1$ID == "ID_2", ]$gene

dt$ID_1查看每个ID是否存在一个基因:

dt$ID_1 <- dt$gene %in% a1[a1$ID == "ID_1", ]$gene
dt$ID_2 <- dt$gene %in% a1[a1$ID == "ID_2", ]$gene

dt$ID_1您可以从
restrape2
软件包中使用
dcast

library(reshape2)
dcast(a1, gene ~ ID)
#   gene ID_1 ID_2
# 1    A    1    1
# 2    D    1    2
# 3    X    1    0


它也可用于数据表

您可以从
重塑2
软件包中使用
dcast

library(reshape2)
dcast(a1, gene ~ ID)
#   gene ID_1 ID_2
# 1    A    1    1
# 2    D    1    2
# 3    X    1    0


它也可用于数据表

这是一个很好的解决方案,对于示例来说非常有效。但是对于原始数据,我得到了一些奇怪的结果。错误消息:使用freq作为值列:使用value.var覆盖。binarytable中并不是所有ID都存在。我不知道您的真实数据,但要消除警告(?)消息,只需显式指定
value.var=“ID”
。解决了它,谢谢!但是,如果我想包括其他列,例如在E列中只包含非静默列,该怎么办?您可以将公式从
gene~ID
更改为
gene+E~ID
。如果OP的数据是
data.table
,请使用
dcast.data.table
而不是
dcast
,以充分利用这是一个很好的解决方案,对于这个例子,它非常有效。但是对于原始数据,我得到了一些奇怪的结果。错误消息:使用freq作为值列:使用value.var覆盖。binarytable中并不是所有ID都存在。我不知道您的真实数据,但要消除警告(?)消息,只需显式指定
value.var=“ID”
。解决了它,谢谢!但是,如果我想包括其他列,例如在E列中只包含非静默列,该怎么办?您可以将公式从
gene~ID
更改为
gene+E~ID
。如果OP的数据是
data.table
,请使用
dcast.data.table
而不是
dcast
,以充分利用这两个世界