为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉风的咖菲猫 2019-06-28 15:41:17
将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,而不必手动遍历每个列?额外的问题:为什么手动方法有效?
查看完整描述

3 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

跟踪马特和德克。如果要在不更改全局选项的情况下重新创建现有的数据框架,可以使用Apply语句重新创建它:

bob <- data.frame(lapply(bob, as.character), stringsAsFactors=FALSE)

这将所有变量转换为类“字符”,如果只想转换因素,请参见马立克解.

正如@Hadley所指出的,下面的内容更简洁。

bob[] <- lapply(bob, as.character)

在这两种情况下,lapply输出列表;但是,由于R的神奇特性,[]在第二种情况下,保存bob对象,从而消除了使用as.data.frame与争论stringsAsFactors = FALSE.


查看完整回答
反对 回复 2019-06-28
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

仅取代因素:

i <- sapply(bob, is.factor)bob[i] <- lapply(bob[i], as.character)

包内dplyr在0.5.0版新函数中mutate_if介绍:

library(dplyr)bob %>% mutate_if(is.factor, as.character) -> bob

来自RStudio的Package purrr给出了另一种选择:

library(purrr)library(dplyr)bob %>% map_if(is.factor, as.character) %>% as_data_frame -> bob

(记住这是新包装)


查看完整回答
反对 回复 2019-06-28
  • 3 回答
  • 0 关注
  • 696 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信