首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在R中将字符转换为因子时保留数值

如何在R中将字符转换为因子时保留数值
EN

Stack Overflow用户
提问于 2017-03-24 16:49:06
回答 2查看 634关注 0票数 1

所以我在R上使用这个矩阵(见下文),你有个体和他们在左,右和总战斗中战斗的次数。我想做方差分析,看看每个人打架次数的差异。但是,我不能使用带有名称的列,所以我需要添加它,这就是我遇到问题的时候:

代码语言:javascript
复制
          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的整数或因子?

代码语言:javascript
复制
           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

干杯

EN

回答 2

Stack Overflow用户

发布于 2017-03-24 16:51:48

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

代码语言:javascript
复制
d1 <- transform(as.data.frame(m1), Individuals = row.names(m1))

在带有character元素的matrix上使用cbind,可以将整个矩阵转换为character,因为matrix只能包含单个类。之后,如果我们将其转换为data.frame,该类将保持原样,或者根据stringsAsFactors是否为FALSE/TRUE而更改为factor

票数 3
EN

Stack Overflow用户

发布于 2017-03-24 17:00:44

这是另一种方法。我生成了一个matrix来开始您的工作,然后将其转换为dataframe。要获得更紧凑的解决方案,请使用akrun解决方案中提到的transform

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42995018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档