将data.framework列从因子转换为字符

将data.framework列从因子转换为字符

我有一个数据框架。我们打电话给他bob:

> head(bob)
                 phenotype                         exclusion
GSM399350 3- 4- 8- 25- 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-GSM399351 3- 4- 8- 25- 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-GSM399352 3- 4- 8- 25- 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-GSM399353 3- 4- 8- 25+ 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-GSM399354 3- 4- 8- 25+ 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-GSM399355 3- 4- 8- 25+ 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-

我想连接这个数据框架的行(这将是另一个问题)。但是你看:

> class(bob$phenotype)[1] "factor"

Bob列是因素。因此,例如:

> as.character(head(bob))[1] "c(3, 3, 3, 6, 6, 6)"       "c(3, 3, 3, 3, 3, 3)"      [3] "c(29, 29, 29, 30, 30, 30)"

我还没有开始理解这一点,但我想这些都是关于(加拉卡库斯国王宫廷)的因素水平的指数。bob?不是我想要的。

奇怪的是,我可以浏览bob用手做

bob$phenotype <- as.character(bob$phenotype)

效果很好。而且,在输入一些内容之后,我可以得到一个data.framework,它的列是字符而不是因素。所以我的问题是:我怎么能自动做到这一点?如何将带因子列的data.framework转换为具有字符列的data.framework,而不必手动遍历每个列?

额外的问题:为什么手动方法有效?


拉风的咖菲猫
浏览 697回答 3
3回答

萧十郎

跟踪马特和德克。如果要在不更改全局选项的情况下重新创建现有的数据框架,可以使用Apply语句重新创建它:bob&nbsp;<-&nbsp;data.frame(lapply(bob,&nbsp;as.character),&nbsp;stringsAsFactors=FALSE)这将所有变量转换为类“字符”,如果只想转换因素,请参见马立克解.正如@Hadley所指出的,下面的内容更简洁。bob[]&nbsp;<-&nbsp;lapply(bob,&nbsp;as.character)在这两种情况下,lapply输出列表;但是,由于R的神奇特性,[]在第二种情况下,保存bob对象,从而消除了使用as.data.frame与争论stringsAsFactors = FALSE.

繁华开满天机

仅取代因素:i&nbsp;<-&nbsp;sapply(bob,&nbsp;is.factor)bob[i]&nbsp;<-&nbsp;lapply(bob[i],&nbsp;as.character)包内dplyr在0.5.0版新函数中mutate_if介绍:library(dplyr)bob&nbsp;%>%&nbsp;mutate_if(is.factor,&nbsp;as.character)&nbsp;->&nbsp;bob来自RStudio的Package purrr给出了另一种选择:library(purrr)library(dplyr)bob&nbsp;%>%&nbsp;map_if(is.factor,&nbsp;as.character)&nbsp;%>%&nbsp;as_data_frame&nbsp;->&nbsp;bob(记住这是新包装)
打开App,查看更多内容
随时随地看视频慕课网APP