在将字符转换为R中的因子时如何保持值

时间:2017-03-24 08:49:06

标签: r matrix dataframe rbind

所以我在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

干杯

2 个答案:

答案 0 :(得分:3)

我们需要先转换为data.frame,然后从行名称

创建一列
d1 <- transform(as.data.frame(m1), Individuals = row.names(m1))

cbind上使用matrix character元素/元素将整个矩阵转换为character,因为matrix只能包含一个类。之后,如果我们转换为data.frame,则该类保持不变或更改为factor,具体取决于stringsAsFactorsFALSE/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