所以我在R上使用这个矩阵(见下文),你有个人和他们在左,右和全面战斗中的次数。我想做方差分析,看看每个人的战斗数量的差异。但是我不能使用带有名称的列,所以我需要添加它,当我遇到问题时就是这样:
Left Right Total
DarkMale 0 1 1
Melman 5 2 7
Polp 0 12 12
Sun 10 1 11
Kevin 0 11 11
McFly 0 30 30
Lovely 36 0 36
Aquarius 0 30 30
Kenny 0 23 23
Lethabo 16 0 16
Charlie 0 3 3
Indv=rbind("DarkMale","Melman","Polp","Sun","Kevin","McFly","Lovely","Aquarius","Kenny","Lethabo","Charlie")
tab=cbind(tab,Total,Indv)
colnames(tab)=c("Left","Right","Total","Individuals")
我做了这个但是然后它转换了Character的其余表格,我也无法使用。
我试过testtab=as.data.frame(tab,stringsAsFactors=FALSE)
摆脱了表中的“”,但仍然保留了所有的价值观。
如何通过保留这些值来转换表(见下文),但是它是整数还是我可以用于anova的因子?
Left Right Total Individuals
DarkMale 0 1 1 DarkMale
Melman 5 2 7 Melman
Polp 0 12 12 Polp
Sun 10 1 11 Sun
Kevin 0 11 11 Kevin
McFly 0 30 30 McFly
Lovely 36 0 36 Lovely
Aquarius 0 30 30 Aquarius
Kenny 0 23 23 Kenny
Lethabo 16 0 16 Lethabo
Charlie 0 3 3 Charlie
干杯
答案 0 :(得分:3)
我们需要先转换为data.frame
,然后从行名称
d1 <- transform(as.data.frame(m1), Individuals = row.names(m1))
在cbind
上使用matrix
character
元素/元素将整个矩阵转换为character
,因为matrix
只能包含一个类。之后,如果我们转换为data.frame
,则该类保持不变或更改为factor
,具体取决于stringsAsFactors
是FALSE/TRUE
。
答案 1 :(得分:1)
这是另一种方法。我生成了matrix
以从您开始的内容开始,然后将其转换为dataframe
。对于更紧凑的解决方案,请使用akrun解决方案中提到的transform
。
tab <- matrix(data =c(1:33) , nrow = 11, ncol = 3)
df <- as.data.frame(tab)
Indv <- c("DarkMale","Melman","Polp","Sun","Kevin","McFly","Lovely","Aquarius","Kenny","Lethabo","Charlie")
colnames <- c("Left","Right","Total","Individuals")
df[4] <- Indv
rownames(df) <- Indv
colnames(df) <- colnames
#
# Left Right Total Individuals
# DarkMale 1 12 23 DarkMale
# Melman 2 13 24 Melman
# Polp 3 14 25 Polp
# Sun 4 15 26 Sun
# Kevin 5 16 27 Kevin
# McFly 6 17 28 McFly
# Lovely 7 18 29 Lovely
# Aquarius 8 19 30 Aquarius
# Kenny 9 20 31 Kenny
# Lethabo 10 21 32 Lethabo
# Charlie 11 22 33 Charlie