大家早上好
我仍然对R很新,我在大多数论坛上搜索我的问题的答案(我怀疑我错过了一个关键的关键字),所以如果我复制一个问题就道歉。我的问题类似于this question,但答案对我来说并不适用。
我有一个1.7米多行的矩阵,此时有20列。出于本练习的目的,我只需要从该矩阵中提取20行,但稍后需要超过1000行。我希望能够将我想要分组的所有行的列表导入到一个较小的矩阵中以供进一步分析,并且让我一直撞到墙上。
我创建了一个只有2列感兴趣的较小矩阵,并将行名设置为动物ID。动物ID是独一无二的。为笨拙的编码道歉。
EBV<-read.csv(file='bfile.csv', header=F, skip=1, sep=',', col.names=c("animal","anim_name","byear","anim_name_pa","anim_name_ma","sex","wwdir_ebv","wwdir_acc","wwmat_ebv","wwmat_acc","afc_ebv","afc_acc","icp_ebv","icp_acc","shd_ebv","shd_acc","scr_ebv","scr_acc","adg_ebv","adg_acc"))
head(EBV)
tail(EBV)
a<-subset(EBV, select=c(animal))
b<-subset(EBV, select=c(wwdir_ebv,wwdir_acc))
c<-as.numeric(as.character(unlist(a)))
d<-as.numeric(as.character(unlist(b)))
x<-matrix(d, nrow=1708891,ncol=2, byrow=F)
rownames(x)<-c
colnames(x)<-c("wwdir_ebv","wwdir_acc")
head(x)
Results of head(x):
*row.name* wwdir_ebv wwdir_acc
33525056 12.0321 49
33702721 13.6674 46
33791336 6.8078 63
33907452 11.0981 51
33909847 7.4192 67
34165696 8.5039 42
现在我想做的是这样的事情:
EX<-read.csv(file='braz.csv', header=F, sep=',', col.names=c("Ani"))
X<-as.numeric(as.list(unlist(EX)))
z<-subset(x, select=c('X')
“braz.csv”文件只包含一个列,为了参数,使用动物33701721,33791336和33909847.逐个提取动物并没有太大的问题,但键入一个最终将逐一列出1000个名字。
我不知道将animalID保存在自己的列中会更有效(即,制作一个1.7mx 3而不是1.7mx 2的矩阵)并尝试根据列进行分组“ animalID”。我最关心的是我要导入并用于子集化的列表。
提前致谢!
答案 0 :(得分:1)
我不知道你为什么要去创建矩阵的麻烦,而不是使用read.csv
返回的data.frame。您对subset
的使用也会让我感到困惑(因为select
会选择列,但显然您希望按行进行子集化)。
您似乎只需要x[rownames(x) %in% unlist(EX),]
。通常,您会发现[
对于子集化而言不比subset
方便,但更强大。在函数内部使用时,subset
也会导致问题。我建议你学习help("[")
。 help("%in%")
也可能值得一读。