所以我在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")我这样做了,但随后它将表的其余部分转换为我也不能使用的字符。我尝试过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干杯
发布于 2017-03-24 16:51:48
我们需要首先转换为data.frame,然后根据行名创建一列
d1 <- transform(as.data.frame(m1), Individuals = row.names(m1))在带有character元素的matrix上使用cbind,可以将整个矩阵转换为character,因为matrix只能包含单个类。之后,如果我们将其转换为data.frame,该类将保持原样,或者根据stringsAsFactors是否为FALSE/TRUE而更改为factor。
发布于 2017-03-24 17:00:44
这是另一种方法。我生成了一个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 Charliehttps://stackoverflow.com/questions/42995018
复制相似问题