当前位置: 首页 > article >正文

R语言6种将字符转成数字的方法,写在新年来临之际

咱们临床研究中,拿到数据后首先要对数据进行清洗,把数据变成咱们想要的格式,才能进行下一步分析,其中数据中的字符转成数字是个重要的内容,因为字符中常含有特殊符号,不利于分析,转成数字后才能更好进行分析。
今天来总结一下常见的几种字符转数字的方法,建议收藏,以后需要用时找得到。咱们先生成一个数据,来示例一下。

library(tidyr)

# 创建原始宽格式的数据框
data <- data.frame(
  id = c(1:8),
  group = c(0, 0, 0, 0, 1, 1, 1, 1),
  w0 = c(0.35, 0.77, 0.48, 0.63, 0.45, 0.56, 1.08, 0.55),
  w1 = c(1.01, 1.32, 1.18, 1.42, 0.59, 0.86, 1.44, 1.20),
  w2 = c(1.47, 1.60, 1.65, 1.88, 0.64, 1.37, 1.93, 1.68),
  w4 = c(2.46, 2.54, 2.86, 3.13, 0.99, 2.04, 2.63, 2.87)
)

# 将数据框从宽格式转换为长格式
df_long <- data %>%
  pivot_longer(
    cols = c('w0', 'w1', 'w2', 'w4'), # 需要转换的列名
    names_to = "time",                # 新生成的列名,用来存储原列名
    values_to = "value"               # 新生成的列名,用来存储原数值
  )

在这里插入图片描述
好的,数据生成了,我们看到到time这一列的变量是w0,w1,w2,w4的字符变量,咱们想要把它转成数字0,1,2,4,应该怎么转换呢?最常见的时候是想起ifelse()函数来一个个的转换,但是这样效率太低了,介绍几种快速转换的。

  1. dplyr包
library(dplyr)
df_long2 <- df_long %>%
  mutate(time = case_when(
    time == "w0" ~ 0,
    time == "w1" ~ 1,
    time == "w2" ~ 2,
    time == "w4" ~ 4,
    TRUE ~ as.numeric(time) # 这一行确保如果未来有其他值,它们不会变成NA
  ))

在这里插入图片描述
这样就轻松转换好了。

  1. 也是继续使用dplyr包recode()函数,咱们注意一下,这两个函数的判断方法有点不一样。等号前面不能有空格。
library(dplyr)
df_long3 <- df_long %>%
  mutate(time = recode(time, w0 =0, w1 =1, w2 =2, w4 =4))

在这里插入图片描述
3. 使用基础R中的 factor() 和 as.numeric(),这个的好处是不用在额外使用R包,但是你必须一个个的指定。也要对基础语法比较掌握。

df_long3$time2 <- as.numeric(as.character(factor(df_long$time, 
                                               levels = c("w0", "w1", "w2", "w4"),
                                               labels = c(0, 1, 2, 4))))

在这里插入图片描述

  1. stringr包来对数字提取,因为咱们是字符后面的数字部分,所以可以用这样的方法,并不适合所有情况。
library(stringr)
df_long4 <- df_long %>%
  mutate(time = as.numeric(str_extract(time, "\\d+")))

在这里插入图片描述

  1. 使用dplyr包的if_else函数,注意一下这个和基础的ifelse()函数是不一样的
df_long5<- df_long %>%
  mutate(time = if_else(time == "w0", 0,
                        if_else(time == "w1", 1,
                                if_else(time == "w2", 2,
                                        if_else(time == "w4", 4, NA_real_)))))

在这里插入图片描述
6. 因为它是位置索引,所以索引回来的是位置,因此有个小缺点,4变成了3,不能完全满意。为什么我还要说呢,使用 match() 函数,这个函数主要是用来索引字符匹配的。明白它的用法在很多地方都能有很大的用途。

df_long6 <- df_long %>%
  mutate(time = match(time, c("w0", "w1", "w2", "w4")) - 1) # 因为索引从1开始,所以减去1

在这里插入图片描述

写在新年来临之际,公众号4年来有无数的铁粉默默支持,给我提了很多好的意见,受益良多,在此默默感谢。
新的一年公众号会将对纵向分析进行一些介绍,包括混合效应模型、gee模型、gamm模型等。也会继续复现一些关于charls的纵向分析文章。
感谢大家对我的scitable包的支持,有些粉丝还不明白它能做什么,最基础的功能就是:基线表、单因素和多因素分析,多模型分析,阈值效应分析,亚组分析,rcs分析。还可以进行数据挖掘和交互效应深层次数据挖掘。
目前还有很多功能待写,比如一键相加交互模型函数、gamm模型函数、gam模型的阈值函数、gee模型的曲线拟合和阈值函数,新版的亚组森林图,相信不会让你们失望的。

最后祝各位粉丝新年快乐,合家美满,连发连中。


http://www.kler.cn/a/461177.html

相关文章:

  • Scrum中敏捷项目经理(Scrum Master)扮演什么角色?
  • 电脑找不到mfc110.dll文件要如何解决?Windows缺失mfc110.dll文件快速解决方法
  • 【Rust练习】26.Package and Crate
  • 【卡通风格的的登录界面】
  • 国产编辑器EverEdit - 常用资源汇总
  • ELK入门教程(超详细)
  • 第17篇 使用数码管实现计数器___ARM汇编语言程序<四>
  • cad学习 day12客餐厅立面
  • 金融租赁系统助力企业转型与市场竞争力提升
  • 如何通过HTTP API更新Doc
  • 区块链技术在电商API接口中的应用探索与前景分析
  • 17000.机器学习-数字1-9实例
  • WPF使用OpenCvSharp4
  • 矩阵的因子分解2-满秩分解
  • PHP+Redis的基本操作方法
  • 动态吸震器在汽车降噪中的创新应用——电磁正反馈调节系统
  • 【机器学习篇】从新手探寻到算法初窥:数据智慧的开启之门
  • sql特殊查询记录
  • uniapp - 小程序实现摄像头拍照 + 水印绘制 + 反转摄像头 + 拍之前显示时间+地点 + 图片上传到阿里云服务器
  • 线性代数期末复习 [基础篇]
  • Three.js教程004:坐标辅助器与轨道控制器
  • <Uniswap v3 数学洞察>笔记(part 2)
  • 【CSS in Depth 2 精译_099】17.5:基于页面滚动的动画时间线设置(全新)+ 17.6:最后一点建议 + 17.7:本章小结
  • TreeMap
  • 如何使用C#与SQL Server数据库进行交互
  • 【每日学点鸿蒙知识】深色模式、Webview查看版本、window设置亮度、List缓存节点更新、预编译JS