我正在尝试为动物效果设计R中的设计矩阵。 我有一个谱系文件和一个数据文件。
数据文件(两列,一列用于动物识别,一列用于特征-在这种情况下为牛奶产量):
AnimalID Trait
2 10
COWX1 11
3 22
RO500 13
ANGUS50X 12
PED文件(3列,第一列是动物ID,第二列是母亲ID,最后一个父亲ID):
AnimalID MotherID FatherID
7 0 0
10 0 0
2 0 0
COWX1 7 10
5 7 0
3 0 10
RO500 2 0
ANGUS50X COWX1 0
最后,我想获得这个设计矩阵:
0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1
矩阵有5行8列。第5行,因为有5个记录特征的动物,第8列,因为所有的动物都是8。
此刻,我使用一个函数来获取设计矩阵,但是只有当我重新编码动物时,它才起作用。该代码应从1开始并应连续。
示例:
动物7是1、10是2、2是3,COWX1是4、5是5、3是6,RO500是7而ANGUS50X是8。
我不想重新编码,我想使用从农民那里获得的动物ID。
我现在使用的功能:
animal <- factor(c(3,4,6,7,8), levels=1:8)
model.matrix(~ animal + 0)
有人可以帮助我解决这个问题吗?
谢谢!
答案 0 :(得分:0)
我想您需要更改设计矩阵的列名和行名
ani<- read.table(text = "
AnimalID Trait
2 10
COWX1 11
3 22
RO500 13
ANGUS50X 12", header = TRUE)
PED <- read.table(text = "
AnimalID MotherID FatherID
7 0 0
10 0 0
2 0 0
COWX1 7 10
5 7 0
3 0 10
RO500 2 0
ANGUS50X COWX1 0", header = TRUE)
animal <- factor(ani$AnimalID, levels=PED$Animal)
dm <- model.matrix(~ animal + 0)
rownames(dm) <- ani$AnimalID
colnames(dm) <- PED$AnimalID
dm
结果如下:
7 10 2 COWX1 5 3 RO500 ANGUS50X
2 0 0 1 0 0 0 0 0
COWX1 0 0 0 1 0 0 0 0
3 0 0 0 0 0 1 0 0
RO500 0 0 0 0 0 0 1 0
ANGUS50X 0 0 0 0 0 0 0 1