【问题标题】:how to keep values when converting character to factor in R将字符转换为R中的因子时如何保留值
【发布时间】:2017-03-24 08:49:05
【问题描述】:

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

干杯

【问题讨论】:

  • tab[, 1:3] <- lapply(tab[, 1:3], as.numeric) 将字符转换为数字
  • 我认为您对 ANOVA 需要什么样的数据深感困惑。事实上,您似乎并不知道应该使用哪种统计技术。

标签: r matrix dataframe rbind


【解决方案1】:

我们需要先转换为data.frame,然后根据行名创建一列

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

在matrix 上使用cbind 和character 元素/元素将整个矩阵转换为character,因为matrix 只能容纳一个类。之后,如果我们转换为data.frame,则类保持不变或更改为factor,具体取决于stringsAsFactors 是否为FALSE/TRUE。

【讨论】:

    【解决方案2】:

    这是另一种方法。我生成了一个 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多