我正在尝试在R中对动物效果进行设计矩阵。 我有一个谱系文件和一个数据文件。
数据文件(2 列,一列用于动物 ID,一列用于性状 - 在本例中为产奶量(:
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)
任何人都可以帮助我解决这个问题吗?
谢谢!
我可以假设您需要更改设计矩阵的列名和行名
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