为了方便大家学习,我已经录制了配套的视频,放在了哔哩哔哩(我的B站账号:阿越就是我),免费观看,复制以下网址粘贴到浏览器打开即可:https://space.bilibili.com/42460432/channel/collectiondetail?sid=3740949
本期目录:
类型判断
类型转换
今天给大家介绍不同的数据类型和结构之间的判断和转换,也是非常常用的操作!
类型判断和转换
类型判断
每种类型都有一个判断类型的函数,以下是常见的几个:
is.numeric() # 是不是数值型?
is.character()
is.double()
is.integer()
is.factor()
is.complex()
is.logical()
is.na()
is.data.frame() # 是不是data.frame
is.array()
is.matrix()
is.list()
创建几个变量用于演示:
# 把一个数字存储到变量my_integer中
my_integer <- 5
integer_variable <- 186L
# 把一段文字存储到变量中
my_string <- "Hello, R!"
可以直接用class()
或者typeof()
:
# 查看变量的类型
class(my_integer)
## [1] "numeric"
class(integer_variable)
## [1] "integer"
class(my_string)
## [1] "character"
还可以使用is.xxx()
判断是不是属于某种类型,比如查看my_integer
的类型:
is.numeric(my_integer) # 是数值型吗?是的,返回TRUE
## [1] TRUE
is.logical(my_integer) # 是逻辑型吗?不是,返回FLASE
## [1] FALSE
a <- c(1,2,3)
is.numeric(a)
## [1] TRUE
NA
表示缺失值,注意不要加引号,加了引号就变成字符型了:
dd <- NA
is.na(dd)
## [1] TRUE
dd <- "NA"
is.na(dd)
## [1] FALSE
is.character(dd)
## [1] TRUE
创建一个数据框用于演示:
patientdata <- data.frame(
patientID = c(1, 2, 3, 4),
age = c(25, 34, 28, 52),
diabetes = c("Type1", "Type2", "Type1", "Type1"),
status = c("Poor", "Improved", "Excellent", "Poor")
)
is.data.frame(patientdata)
## [1] TRUE
创建一个矩阵用于演示:
y <- matrix(1:20, nrow=5, ncol=4,
dimnames = list(c("行1","行2","行3","行4","行5"),
c("列1","列2","列3","列4"))
)
is.matrix(y)
## [1] TRUE
创建一个列表用于演示:
g <- "My First List" # 字符串
h <- c(25, 26, 18, 39) # 数值型向量
j <- matrix(1:10, nrow=5) # 矩阵
k <- c("one", "two", "three") # 字符型向量
l <- list("apple",1,TRUE) # 列表
# 放到1个列表中
mylist <- list(title=g, ages=h, j, k, l)
is.list(mylist)
## [1] TRUE
#is.vector(mylist)
类型转换
不同的变量之间可以相互转换。常见的类型转换函数:
as.numeric() # 变成数值型
as.character()
as.double()
as.integer()
as.factor()
as.complex()
as.logical()
as.data.frame() # 变成数据框
as.array()
as.matrix()
as.list()
数值型向量转换为字符型/因子型/逻辑型:
a <- c(1,2,3)
a
## [1] 1 2 3
as.character(a) # 变成字符型
## [1] "1" "2" "3"
as.factor(a) # 变成因子型
## [1] 1 2 3
## Levels: 1 2 3
as.logical(a) # 变成逻辑型,无意义
## [1] TRUE TRUE TRUE
字符型向量转换:
d <- c("你好","我是","阿越")
d
## [1] "你好" "我是" "阿越"
as.numeric(d) # 错误用法,字符怎么能直接变数字呢?
## [1] NA NA NA
as.factor(d) # 但是可以变因子
## [1] 你好 我是 阿越
## Levels: 阿越 你好 我是
因子转换:
f <- factor(c("你好","我是","阿越"))
f
## [1] 你好 我是 阿越
## Levels: 阿越 你好 我是
as.numeric(f) # 直接变数字
## [1] 2 3 1
as.character(f)
## [1] "你好" "我是" "阿越"
矩阵转换:
as.data.frame(y)
## 列1 列2 列3 列4
## 行1 1 6 11 16
## 行2 2 7 12 17
## 行3 3 8 13 18
## 行4 4 9 14 19
## 行5 5 10 15 20
#as.list(y) # 太长不演示
as.numeric(y)
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
as.factor(y)
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## Levels: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
as.character(y)
## [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15"
## [16] "16" "17" "18" "19" "20"
数据框转换:
as.matrix(patientdata)
## patientID age diabetes status
## [1,] "1" "25" "Type1" "Poor"
## [2,] "2" "34" "Type2" "Improved"
## [3,] "3" "28" "Type1" "Excellent"
## [4,] "4" "52" "Type1" "Poor"
as.list(patientdata)
## $patientID
## [1] 1 2 3 4
##
## $age
## [1] 25 34 28 52
##
## $diabetes
## [1] "Type1" "Type2" "Type1" "Type1"
##
## $status
## [1] "Poor" "Improved" "Excellent" "Poor"
as.character(patientdata)
## [1] "c(1, 2, 3, 4)"
## [2] "c(25, 34, 28, 52)"
## [3] "c(\"Type1\", \"Type2\", \"Type1\", \"Type1\")"
## [4] "c(\"Poor\", \"Improved\", \"Excellent\", \"Poor\")"
# as.numeric(patientdata) # 错误
# as.factor(patientdata) # 错误
列表转换:
# as.data.frame(mylist) # 报错
as.matrix(mylist)
## [,1]
## title "My First List"
## ages numeric,4
## integer,10
## character,3
## list,3
联系我们,关注我们
免费QQ交流群1:613637742 免费QQ交流群2:608720452 公众号消息界面关于作者获取联系方式 知乎、CSDN、简书同名账号 哔哩哔哩:阿越就是我