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
,以充分利用这两个世界