服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - R语言 - R语言:实现因子与字符串的互转

R语言:实现因子与字符串的互转

2022-01-10 15:29蚁方阵 R语言

这篇文章主要介绍了R语言:实现因子与字符串的互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

在导入大批量数据时,如果没有显式地指定“stringsAsFactors = FALSE”,默认会将所有的字符串转换为因子,导致数据处理速度较慢。

示例数据如下:

?
1
2
3
4
5
name,math,english,sex,year
"yiifaa",65,68,"M",2018
"yiifee",95,98,"F",2018
"guagua",75,78,"M",2018
"MM",85,88,"F",2018

查看数据概要,发现默认将字符串转换为因子,并进行了分组计数(这也是处理速度较慢的原因之一)

概要如下:

?
1
2
3
4
5
6
7
name        math         english     sex        year    
guagua:1   Min.   :65.0   Min.   :68.0   F:2   Min.   :2018 
MM    :1   1st Qu.:72.5   1st Qu.:75.5   M:2   1st Qu.:2018 
yiifaa:1   Median :80.0   Median :83.0         Median :2018 
yiifee:1   Mean   :80.0   Mean   :83.0         Mean   :2018 
           3rd Qu.:87.5   3rd Qu.:90.5         3rd Qu.:2018 
           Max.   :95.0   Max.   :98.0         Max.   :2018

但这样的分组计数并没有意义,所以需要利用“as.character”转换为字符,如下:

?
1
2
3
4
5
6
7
#! /usr/bin/env RScript
setwd("D:/Workspace/R-Works/R-Stat")
scores <- read.table("Score.txt", header = TRUE, sep = ",", quote="\"", encoding = "UTF-8", stringsAsFactors = TRUE)
# 将因子转换为字符
scores$name <- as.character(scores$name)
# 多转一个进行测试
scores$sex <- as.character(scores$sex)

再次查看概要,如下:

?
1
2
3
4
5
6
7
name                math         english         sex                 year    
 Length:4           Min.   :65.0   Min.   :68.0   Length:4           Min.   :2018 
 Class :character   1st Qu.:72.5   1st Qu.:75.5   Class :character   1st Qu.:2018 
 Mode  :character   Median :80.0   Median :83.0   Mode  :character   Median :2018 
                    Mean   :80.0   Mean   :83.0                      Mean   :2018 
                    3rd Qu.:87.5   3rd Qu.:90.5                      3rd Qu.:2018 
                    Max.   :95.0   Max.   :98.0                      Max.   :2018

可以看到,概要中已经没有了分组计数,但多了总数计量,如果要恢复分组计数,则需要重新创建因子,如下:

?
1
scores$sex <- factor(scores$sex, levels=c("M", "F"), ordered = TRUE)

结论

在导入大批量数据时,为了提高性能,尽可能分两步走:

1. 显式指定“stringsAsFactors = FALSE”;

2. 依次将所需要的数据列(向量)转换为因子;

补充:R语言:变量名称和字符串的转换

在R语言中,经常会遇到变量名称和字符串相互转换的问题。

比如说,进行1000次循环运算,并将运算结果存储在1000个变量中,如x_1, x_2, ... , x_1000。这时候可以使用assign()函数,示例如下:

?
1
2
3
4
5
> a
错误: 找不到对象'a'
> assign('a', 1)
> a
[1] 1

上面的例子将字符'a'转变为变量a,并将其赋值为1 。

相反,如果我们想遍历一个变量序列,并对其中的每一个变量都进行操作,该怎么办呢?我们可以使用get()函数。示例如下:

?
1
2
3
4
5
> a <- 1
> b <- 2
> c <- 3
> sequence <- c('a', 'b', 'c')
> for (var in sequence){print(var + 10)}

错误于var + 10 : 二进列运算符中有非数值参数

?
1
2
3
4
> for (var in sequence){print(get(var) + 10)}
[1] 11
[1] 12
[1] 13

我们可以发现,get函数将字符var转变为变量,并根据变量的值进行后续操作。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。

原文链接:https://blog.csdn.net/yiifaa/article/details/82318459

延伸 · 阅读

精彩推荐
  • R语言R studio 批量注释的快捷方式

    R studio 批量注释的快捷方式

    这篇文章主要介绍了R studio 批量注释的快捷方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    JasonKQLin13342022-01-04
  • R语言R语言中c()函数与paste()函数的区别说明

    R语言中c()函数与paste()函数的区别说明

    这篇文章主要介绍了R语言中c()函数与paste()函数的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    yiyu_j11152022-01-12
  • R语言R语言可视化存储矢量图实现方式

    R语言可视化存储矢量图实现方式

    这篇文章主要为大家介绍了R语言存储矢量图的实现方式过程,有需要的朋友可以借鉴参考下,希望能够有所你帮助,祝大家多多进步,早日升职加薪...

    Kanny广小隶9392022-01-20
  • R语言R语言绘制散点图实例分析

    R语言绘制散点图实例分析

    在本篇文章里小编给大家整理的是一篇关于R语言绘制散点图实例分析内容,有需要的朋友们可以学习下。...

    w3cschool6942022-01-06
  • R语言R语言编程学习绘制动态图实现示例

    R语言编程学习绘制动态图实现示例

    这篇文章主要介绍了R语言编程学习绘制动态图实现示例,有需要的的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    微小冷7652022-01-18
  • R语言R语言-使用ifelse进行数据分组

    R语言-使用ifelse进行数据分组

    这篇文章主要介绍了R语言-使用ifelse进行数据分组,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    小力丸12042022-01-10
  • R语言R语言创建矩阵的实现方法

    R语言创建矩阵的实现方法

    这篇文章主要介绍了R语言创建矩阵的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随...

    hjk_caesar9462021-12-27
  • R语言聊聊R语言中Legend 函数的参数用法

    聊聊R语言中Legend 函数的参数用法

    这篇文章主要介绍了聊聊R语言中Legend 函数的参数用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    Gavin姓陈6352021-12-28