赞
踩
前言:想要练习数据可以私信哦~
快捷键:
运行:CTRL+ENTER
赋值<-:ALT+-
目录
第一部分:赋值
age <- c(21, 22.3, 23, 19.8, 22.9, 20)
BMI <- c(20.3, 19.5, 19.8, 21.2, 22.3, 19.6)
student_ID <- c('No.1', 'No.2', 'No.3', 'No.4', 'No.5', 'No.6')
data.frame(student_ID, age, BMI) #生成表格
mydata <- data.frame(student_ID, age, BMI)
mydata
运行结果:
student_ID age BMI 1 No.1 21.0 20.3 2 No.2 22.3 19.5 3 No.3 23.0 19.8 4 No.4 19.8 21.2 5 No.5 22.9 22.3 6 No.6 20.0 19.6
第二部分:四则运算
72/10
72 %/% 10 #取整%/%
72 %% 10 #取余
ceiling(7.2) #向上取整
floor(7.2) #向下取整
5 ^ 2
6 ** 2 #乘方
sqrt(100) #开方
运行结果: > 72/10 [1] 7.2 > 72 %/% 10 #取整%/% [1] 7 > 72 %% 10 #取余 [1] 2 > ceiling(7.2)#向上取整 [1] 8 > floor(7.2)#向下取整 [1] 7 > 5 ^ 2 [1] 25 > 6 ** 2#乘方 [1] 36 > sqrt(100)#开方 [1] 10
> #第三部分:三角函数运算
> #三角函数输入的数据是弧度,180°=π弧度,1°=π/180
> sin(pi/180*30) #sin30°
[1] 0.5
> #第四部分:对数函数log(x,base=10) > log(64, base = 8)#8的几次方等于64 [1] 2 > log(25)#如果省略base,默认底数是e=2.718282 ln(x) [1] 3.218876
> #第五部分:指数函数exp(x) > exp(1) [1] 2.718282 > exp(2) [1] 7.389056 > log(exp(3.7)) [1] 3.7 > log(exp(1)) [1] 1
> #第六部分:简单统计运算 > mydata student_ID age BMI 1 No.1 21.0 20.3 2 No.2 22.3 19.5 3 No.3 23.0 19.8 4 No.4 19.8 21.2 5 No.5 22.9 22.3 6 No.6 20.0 19.6 > mean(age) #均值 [1] 21.5 > sd(age) #标准差 [1] 1.431084 > var(age) #方差 [1] 2.048 > range(age) #范围 [1] 19.8 23.0 > median(age) #中位数 [1] 21.65 > quantile(age) #四分位数 0% 25% 50% 75% 100% 19.80 20.25 21.65 22.75 23.00 > max(age) #最大值 [1] 23 > min(age) #最小值 [1] 19.8
> #第七部分:绝对值、四舍五入
> abs(-3) #绝对值
[1] 3
> abs(5)
[1] 5
> pi
[1] 3.141593
> round(pi,2)#保留两位小数
[1] 3.14
> #第八部分:比较大小
> #大于(>), 小于(<), 小于等于(<=), 等于(==),不等于(!=)
> 5 > 4
[1] TRUE
> 6 > 8
[1] FALSE
> 9 >= 12
[1] FALSE
> 8 >= 8
[1] TRUE
> 1 != 2
[1] TRUE
> #第九部分:且(& 两边都是true),或(| 一边有true),非(!取反) > 3 > 2 & 5 > 6 [1] FALSE > 3 > 2 | 5 > 6 [1] TRUE > !(3 > 10) [1] TRUE
R最常处理的数据结构是:向量、数据框、列表、矩阵
向量:数据分析中的变量,数值型向量,字符型向量和逻辑型向量等,如age=18
> ##########NO.5数据类型介绍############ > #1、向量vector > age #数值型向量 [1] 21.0 22.3 23.0 19.8 22.9 20.0 > BMI [1] 20.3 19.5 19.8 21.2 22.3 19.6 > View(mydata) > gender <- c("female", "male", "female", "male", "male", "female") > gender #字符型向量 [1] "female" "male" "female" "male" "male" "female" > selected <- ifelse(BMI > 20, TRUE, FALSE) > selected #逻辑型向量 [1] TRUE FALSE FALSE TRUE TRUE FALSE
#2、数据框data.frame
#形成数据框的函数data.frame
mydata2 <- data.frame(mydata, gender, selected)
View(mydata2)
#3、向量和数据框中元素的调用 > mydata2[4,'selected'] #数据框元素调用的规则mydata2[行,列] [1] TRUE > mydata2[4,5] [1] TRUE > mydata2[,3]#第三列的数据 [1] 20.3 19.5 19.8 21.2 22.3 19.6 > mydata2[,'BMI']#查询BMI的数据 [1] 20.3 19.5 19.8 21.2 22.3 19.6 > mydata2[2,]#第二行数据 student_ID age BMI gender selected 2 No.2 22.3 19.5 male FALSE > mydata2[,-3]#不要第三列 student_ID age gender selected 1 No.1 21.0 female TRUE 2 No.2 22.3 male FALSE 3 No.3 23.0 female FALSE 4 No.4 19.8 male TRUE 5 No.5 22.9 male TRUE 6 No.6 20.0 female FALSE > mydata2[-1,]#不要第一行 student_ID age BMI gender selected 2 No.2 22.3 19.5 male FALSE 3 No.3 23.0 19.8 female FALSE 4 No.4 19.8 21.2 male TRUE 5 No.5 22.9 22.3 male TRUE 6 No.6 20.0 19.6 female FALSE > mydata2[c(1,3,5),]#挑选1,3,5行 student_ID age BMI gender selected 1 No.1 21.0 20.3 female TRUE 3 No.3 23.0 19.8 female FALSE 5 No.5 22.9 22.3 male TRUE > mydata2[,c(1,3,5)]#挑选1,3,5列 student_ID BMI selected 1 No.1 20.3 TRUE 2 No.2 19.5 FALSE 3 No.3 19.8 FALSE 4 No.4 21.2 TRUE 5 No.5 22.3 TRUE 6 No.6 19.6 FALSE > #数据框是面,是二维的,包括行和列,所谓调用元素必须给出行和列的信息 > #向量是线,是一维的。var[] > age [1] 21.0 22.3 23.0 19.8 22.9 20.0 > age[3] [1] 23 > age[-1] #不要第一个 [1] 22.3 23.0 19.8 22.9 20.0 > age[-c(1,3,4)] #不要第1,3,4 [1] 22.3 22.9 20.0
> #4、矩阵matrix > 5*6 [1] 30 > samp <- matrix(1:30,nrow = 5,ncol = 6)#生成5行6列,1-30的数 > samp [,1] [,2] [,3] [,4] [,5] [,6] [1,] 1 6 11 16 21 26 [2,] 2 7 12 17 22 27 [3,] 3 8 13 18 23 28 [4,] 4 9 14 19 24 29 [5,] 5 10 15 20 25 30 > samp[2,4]#取第二行第四列的数 [1] 17 > colnames(samp) <- c('col_1', 'col_2', 'col_3', 'col_4', 'col_5', 'col_6')#改行名 > samp col_1 col_2 col_3 col_4 col_5 col_6 [1,] 1 6 11 16 21 26 [2,] 2 7 12 17 22 27 [3,] 3 8 13 18 23 28 [4,] 4 9 14 19 24 29 [5,] 5 10 15 20 25 30
> #5、列表list > #列表包容性强,是一个大杂烩。(收纳整理) > a [1] 1 > mylist <- list(mydata, a, gender, selected, samp) > mylist [[1]] student_ID age BMI 1 No.1 21.0 20.3 2 No.2 22.3 19.5 3 No.3 23.0 19.8 4 No.4 19.8 21.2 5 No.5 22.9 22.3 6 No.6 20.0 19.6 [[2]] [1] 1 [[3]] [1] "female" "male" "female" "male" "male" [6] "female" [[4]] [1] TRUE FALSE FALSE TRUE TRUE FALSE [[5]] col_1 col_2 col_3 col_4 col_5 col_6 [1,] 1 6 11 16 21 26 [2,] 2 7 12 17 22 27 [3,] 3 8 13 18 23 28 [4,] 4 9 14 19 24 29 [5,] 5 10 15 20 25 30 > names(mylist) <- c('mydata', 'a', 'gender', 'selected', 'samp') #改列表中的名字 > mylist $mydata student_ID age BMI 1 No.1 21.0 20.3 2 No.2 22.3 19.5 3 No.3 23.0 19.8 4 No.4 19.8 21.2 5 No.5 22.9 22.3 6 No.6 20.0 19.6 $a [1] 1 $gender [1] "female" "male" "female" "male" "male" [6] "female" $selected [1] TRUE FALSE FALSE TRUE TRUE FALSE $samp col_1 col_2 col_3 col_4 col_5 col_6 [1,] 1 6 11 16 21 26 [2,] 2 7 12 17 22 27 [3,] 3 8 13 18 23 28 [4,] 4 9 14 19 24 29 [5,] 5 10 15 20 25 30 > mylist$mydata[3,2]#查找列表中的mydata数据框第三行第二列的元素 [1] 23 > mylist$selected[5]#查找向量 [1] TRUE > mylist$samp[2,4] col_4 17
> #6、什么时候加"",也可以使用'',不过""更严谨 > #录入内容是字符串的时候,必须要加"" > p <- 23.36256 > p*2 [1] 46.72512 > p*4 [1] 93.45024 > sqrt(p) [1] 4.833483 > K <- "天天开心"
#1、键盘手动录入数据
需要导入的数据框:
Patient_ID <- c('NO.1', 'NO.2',
'NO.3', 'NO.4',
'NO.5', 'NO.6',
'NO.7', 'NO.8',
'NO.9', 'NO.10')
Gender <- c('male', 'male',
'female', 'female',
'female', 'female',
'female', 'female',
'female', 'male')
Age <- c(67, 67, 60, 69, 80, 63, 55, 66, 47, 62)
mydata1 <- data.frame(Patient_ID, Gender, Age) #合并数据
View(mydata1) #查看数据表
edit(mydata1) #修改数据
mydata2 <- edit(mydata1) #告诉系统修改后生成一个新的数据框mydata2mydata1 <- edit(mydata1) #覆盖
#2、txt格式数据的导入(txt格式推荐使用写代码导入)
#导入txt格式数据用到的函数是read.table
mydata3 <- read.table("C:/Users/ASUS/Desktop/R语言配套资料/配套资料/NO.7_配套资料/NO.7_txt格式数据导入.txt"
,header = TRUE)#表示第一行为变量名
#重点:R软件不能识别\的路径,R软件只能识别/或者\\的路径
#3.excel格式数据导入(既可以通过代码,也可以通过鼠标点击)
#导入excel格式数据用到的函数是read_excel,这个函数所在的程序包readxl不是R自带的
#因此,使用之前需要install,然后再library
mydata5 <- NO_7_excel格式数据 #替换名字
mydata5$性别 <- factor(mydata5$性别, levels = c(1,2), labels = c('男','女'))
#mydata5性别的变量里面的1,2替换成男和女,并且替换的结果作为factor存在的
View(mydata5)
#4.csv格式数据导入(只能通过代码,不能通过鼠标点击)
#导入csv格式数据用到的函数是read.csv,这个函数所在的utils程序包是R自带的
mydata6 <- read.csv('C:\\Users\\ASUS\\Desktop\\R语言配套资料\\配套资料\\NO.7_配套资料\\NO.7_csv格式数据.csv')
mydata6$性别 <- factor(mydata6$性别, levels = c(1,2), labels = c('男','女'))
mydata6$家乡 <- factor(mydata6$家乡, levels = c(1,2,3,4), labels = c('农村', '镇(非农业人口)', '县城(或县级市)', '县级以上城市'))
View(mydata6)
#5.SPSS格式数据导入(既可以通过代码,也可以通过鼠标点击)
mydata7 <- NO_7_SPSS格式数据 #改数据框的名字
#字符串的定义:只要内容加上了单引号或者双引号,那么这个内容就是字符串
#对于阿拉伯数字,既可以是字符也可以是数字
用到的数据表:
#1.求字符串的长度
nchar(mydata$职业)#2.查找(查找字符串的各个元素中是否包含目标字符)
#以上的查找要求使用的函数是grep或grepl(t f)
#grep('目标字符', 字符串变量)
#grepl('目标字符', 字符串变量)
grep('辛辣', mydata$饮食偏好)#查找mydata中饮食偏好这一栏中是否有‘辛辣’两个字
grepl('辛辣', mydata$饮食偏好)
as.numeric(grepl('辛辣', mydata$饮食偏好))#把true和false转换成阿拉伯1/0
mydata$辛辣 <- as.numeric(grepl('辛辣', mydata$饮食偏好))#在mydata中生成辛辣列表
mydata$高脂肪饮食猪肉 <- as.numeric(grepl('高脂肪饮食猪猪猪肉', mydata$饮食偏好))
mydata$高盐 <- as.numeric(grepl('高盐', mydata$饮食偏好))
mydata$喜油腻 <- as.numeric(grepl('喜油腻', mydata$饮食偏好))
mydata$动物内脏 <- as.numeric(grepl('动物内脏', mydata$饮食偏好))
#3.提取(提取字符串中的部分字符串)
#提取函数:substr
#substr(字符串,开始位置,结束位置)
mydata$出身年份 <- substr(mydata$身份证号, 7, 10)#此时截取出来的是字符型,为了计算年龄,需要转换成数字型
mydata$出身年份 <- as.numeric(mydata$出身年份)
str(mydata$出身年份)
#4.替换/删除
#gsub('被替换的内容','替换内容',字符串)
#4.1 gsub的删除用法
#提取mydata$姓名编号中的姓名,删除编号
#将编号替换成没有任何内容
gsub('[0-9]', '', mydata$姓名编号)
mydata$姓名 <- gsub('[0-9]', '', mydata$姓名编号)#提取mydata$姓名编号中的编号,删除姓名
#将姓名替换成没有任何内容
mydata$编号 <- gsub('[^0-9]', '', mydata$姓名编号)#[^0-9]表示阿拉伯数字0-9的补集(除了阿拉伯数字之外的内容)
#4.2 gusb的替换用法
#需要把身份证号中的x替换成'保密数字'
mydata$身份证号 <- gsub('X', '保密数字', mydata$身份证号)
#4.3 substr函数也可以替换
#将身份证号中的出生年份隐藏,替换成xxx
#由于出身年份每个人不一样,没有共同特征,用gusb不好操作
#substr(字符创,开始位置,结束位置) <- '目标内容'
mydata$隐匿年份 <- mydata$身份证号
substr(mydata$隐匿年份, 7, 10) <- 'xxxx'
#5.粘贴paste paste0
#paste(变量1,变量2,sep='*')用*隔开
mydata$姓名编号2 <- paste(mydata$姓名, mydata$编号, sep = '*')
mydata$姓名编号3 <- paste(mydata$姓名, mydata$编号, sep = '')
mydata$姓名编号4 <- paste0(mydata$姓名, mydata$编号)#和上一条用法一样
#6.查找(查找某一个具体内容在在字符串中的位置)
#regexpr('具体内容',字符串,fixed = TRUE)
#查找mydata姓名编号2中星号的位置,注意要加 fixed = TRUE 精准定位
mydata$星号位置 <- regexpr('*', mydata$姓名编号2, fixed = TRUE)
#7.拆分
#strsplit(字符串,split = '', fixed = TRUE)
aaa <- strsplit(mydata$姓名编号2, split = '*' ,fixed = TRUE)#以星号进行拆分
#strsplit拆分后的结果不是变量,软件没法直接把拆分后的结果放进原来的数据
#strsplit拆分后的结果是列表list,我们需要把list转成matrix或者vector或者data.frame才可以放进数据框
# do.call可以把list转换成矩阵
# do.call(rbind,list名字)rbind行合并
aaa <- do.call(rbind,aaa)
aaa <- data.frame(aaa)#转换成数据框
colnames(aaa) <- c('姓名2', '编号2')
mydata <- data.frame(mydata, aaa)
需要用到的表:
#1、日期向量Date YYYY-mm-dd
#2、时间向量POSIXct YYYY-mm-dd HH:MM:SS
l <- c("2022-11-22",'2022-11-01','2022-11-03')
#日期是以字符型的形式进入R的,进入后需要人为转换成Date形式
l <- as.Date(l)#转换成Date才能计算时间差
k <- c('2022-11-22 17:06:23', '2022-11-28 19:12:06', '2023-7-13 13:38:26')
k <- as.POSIXct(k)#转换成时间向量
> #3、lubridate针对时间日期变量的程序包 > library(lubridate) > #3.1 提取日期和时间向量的年、月、日、季度 > year(l) [1] 2022 2022 2022 > month(l) [1] 11 11 11 > day(l) [1] 22 1 3 > quarter(l) [1] 4 4 4 > > year(k) [1] 2022 2022 2023 > month(k) [1] 11 11 7 > day(k) [1] 22 28 13 > quarter(k) [1] 4 4 3 > hour(k) [1] 17 19 13 > minute(k) [1] 6 12 38 > second(k) #秒 [1] 23 6 26
#4时间向量和日期向量的加减法 > #日期向量天数变化,时间向量秒数变化 > l [1] "2022-11-22" "2022-11-01" "2022-11-03" > s <- l+3 #增加3天 > s [1] "2022-11-25" "2022-11-04" "2022-11-06" > > k [1] "2022-11-22 17:06:23 CST" [2] "2022-11-28 19:12:06 CST" [3] "2023-07-13 13:38:26 CST" > f <- k+30 > f [1] "2022-11-22 17:06:53 CST" [2] "2022-11-28 19:12:36 CST" [3] "2023-07-13 13:38:56 CST"
#5、实例演示时间差、日期差的计算方法
mydata <- NO_9_配套数据
str(mydata)#5.1 使用lubridate程序包中的ymd函数把变量类型改成Date
mydata$入院日期 <- ymd(mydata$入院日期)#把变量日期改成Date
mydata$手术日期 <- ymd(mydata$手术日期)#5.2 生成正确的时间变量
mydata$手术开始_完整时间 <- paste(mydata$手术日期,
mydata$手术开始时间,
sep = ' ')
mydata$手术结束_完整时间 <- paste(mydata$手术日期,
mydata$手术结束时间,
sep = ' ')mydata$出院日期 <- ymd(mydata$出院日期)
mydata$手术开始_完整时间 <- ymd_hms(mydata$手术开始_完整时间)
mydata$手术结束_完整时间 <- ymd_hms(mydata$手术结束_完整时间)
#5.3 计算时间差
mydata$手术等待时间 <- difftime(mydata$手术日期,
mydata$入院日期,
units = 'days')#以天进行计算
mydata$手术时长 <- difftime(mydata$手术结束_完整时间,
mydata$手术开始_完整时间,
units = 'hours')#以小时为单位
> #1.R语言缺失值表达形式NA(not available) > score <- c(92,91,NA,62,NA,85,88,NA,92,NA) > score [1] 92 91 NA 62 NA 85 88 NA 92 NA > > #2.缺失值数量计算--计算变量中几个缺失值 > #缺失值数量计算的函数是summary() > summary(score) Min. 1st Qu. Median Mean 3rd Qu. Max. 62.00 85.75 89.50 85.00 91.75 92.00 NA's 4 #3查找缺失值的位置 > #缺失值位置查找函数是is.na() > #is.na():将向量中的每一个元素根据是否是缺失值而转成一个逻辑形式 > is.na(score) [1] FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE [9] FALSE TRUE > #用which函数查找缺失值的位置 > which(is.na(score)) [1] 3 5 8 10 #4.如何忽略缺失值 > #省略缺失值的函数是na.omit() > score [1] 92 91 NA 62 NA 85 88 NA 92 NA > na.omit(score) #忽略缺失值 [1] 92 91 62 85 88 92 attr(,"na.action") [1] 3 5 8 10 attr(,"class") [1] "omit" > mean(na.omit(score)) #计算除了NA的平均值 [1] 85
#5.缺失值的处理
#5.1 缺失值占比比较多:缺失值占比>80%,那么,这一列向量可以直接
#删除,没有进行数据分析的价值了。#5.2 缺失值在可接受范围内:缺失值在30%-80%之间,此时可以把缺失值单独作为一个类别。
score[c(1,2,7)] #查找1,2,7分数
score[which(is.na(score))] <- 9999 #显示所有缺失值,并赋值9999
score#5.3 缺失值占比比较少:缺失值占比<30%,则可以对缺失值进行填补
#5.3.1 连续型变量(数值型向量)的缺失值填补
#5.3.1.1 服从正态分布的连续型变量选择均值来填补缺失值
mydata <- NO_10_配套数据
class(mydata)
mydata <- as.data.frame(mydata)#转成传统的data.frame
summary(mydata)#统计数据
#第六列臀围NA数据比较多,需要删除(mydata[,-列])行保留
#数据框的向量或者元素的调用
数据框$变量名
数据框[行,列]
mydata2 <- mydata[,-6]
summary(mydata2)
#因为是否正态性决定了缺失值填补的内容,所以第一步是要检验正态性
shapiro.test(mydata2$LDL) #对向量进行正态性检验
#得出p>0.05,服从正态分布,因此原则均值来填补两个缺失值。
which(is.na(mydata2$LDL))#找出两个缺失值的位置
mydata2$LDL[which(is.na(mydata2$LDL))] <- mean(na.omit(mydata2$LDL))#省略缺失值,计算平均值
#5.3.1.2 不服从正态分布的连续型变量选择中位数来填补缺失值
#对向量进行正态性检验
#得出p<0.05,服从正态分布,因此原则中位数来填补缺失值。median求中位数
shapiro.test(mydata2$TG)
mydata2$TG[which(is.na(mydata2$TG))] <-median(na.omit(mydata2$TG))
#5.3.2 分类型变量(字符型变量)的缺失值填补
summary(mydata2$严重程度)
#当分类型变量录入值是字符型,那么NA也会计算到字符里面,所以显示不出缺失数量
summary(mydata2$性别)
mydata2$性别2 <- factor(mydata2$性别,levels = c('男','女'), labels = c(1,2))
which(is.na(mydata2$性别2))
mydata2$严重程度 <- factor(mydata2$严重程度 ,levels = c(1,2,3,4),labels = c('轻度','中度','中重度','重度'))
#注意,此处分为了四个字符因子c('轻度','中度','中重度','重度'),所以可以判断是否为NA
summary(mydata2$严重程度)
#分类型变量(字符型变量)的缺失值应该选择众数来填补
#众数是出现字符最多类别
mydata2$严重程度[which(is.na(mydata2$严重程度))] <- '中重度'
#1.计算变量 以计算BMI为例
#BMI = 体重(KG)/(身高m*身高m)
mydata$身高 <- mydata$身高/100
mydata$BMI <- mydata$体重/(mydata$身高*mydata$身高)
#2.变量的重新编码
#问卷的Q10属于逆向题,为了和纬度中其他题项的方向保持一致
#因此,需要对Q10进行逆向处理
#原来的12345要转成54321
#逆向的重新编码需要用到的函数是recode,这个函数所在的程序包是car程序包
library(car)
mydata$Q10逆 <- recode(mydata$Q10, "1 = 5; 2 = 4; 3 = 3; 4 = 2; 5 = 1")
#3.数据框中列位置的调整
mydata <- mydata[,c(1:14, 26, 15:25)] #26列插入到14到15列之间
mydata$行为不当得分 <- (mydata$Q1+mydata$Q8+mydata$Q10+mydata$Q14+mydata$Q16+mydata$Q19)/6
#4.变量分段
#BMI的划分标准:偏瘦BMI<18.5;正常BMI[18.5,24)
#偏瘦BMI[24,27.9],肥胖BMI>27.9
mydata$BMI分类[mydata$BMI < 18.5] <- "偏瘦"
mydata$BMI分类[mydata$BMI < 24 & mydata$BMI >= 18.5] <- '正常'
mydata$BMI分类[mydata$BMI < 28 & mydata$BMI >= 24] <- '偏胖'
mydata$BMI分类[mydata$BMI >= 28] <- "肥胖"
> #1.ifelse代码结构 > #ifelse(条件,满足条件的后果,不满足条件的后果) > #实例1: > #爹:如果你的考试成绩在90以上,我就给你买一个奥特曼,否则不买 > x <- 85 > x [1] 85 > ifelse(x > 90, '买奥特曼', '不买奥特曼') [1] "不买奥特曼" > > #80-90分之间,买一个小奥特曼, >90分买大奥特曼,<80分什么都不买 > ifelse(x <= 90 & x >= 80, '买小奥特曼', + ifelse(x > 90, '买大奥特曼', '什么都不买')) [1] "买小奥特曼" > x1 <- 55 > ifelse(x1 <= 90 & x1 >= 80, '买小奥特曼', + ifelse(x1 > 90, '买大奥特曼', '什么都不买')) [1] "什么都不买" > #以上的例子中,仅仅针对一个单一的数值来实现的ifelse,那么 > #如果我的研究对象是一列向量,ifelse仍然可以使用#实例2:一年级有200名学生,判别这些学生的成绩等相关情况
#及格的判别标准>=60为及格,否则,不及格
mydata$是否及格 <- ifelse(mydata$成绩 >= 60, '及格', '不及格')#总结:ifelse既可以对单个数值进行判断,也可以针对一列向量进行判断
> #2 if else语法结构 > #if(条件){ > # 满足条件的结果 > #}else{ > # 不满足条件的结果 > #} > > #实例3:<60不及格,60-70良好,71-80良好,>80优秀 > h <- 85 > #3.1使用ifelse > ifelse(h < 60, '不及格', ifelse(h<=70, '中等', ifelse(h <= 80, '良好','优秀'))) [1] "优秀" > > #3.2 使用 if else > # <60不及格,60-70良好,71-80良好,>80优秀 > h <- 76 > if(h<60){ + print('不及格') + }else{ + if(h <= 70){ + print('中等') + }else{ + if(h <= 80){ + print('良好') + }else{ + print('优秀') + } + } + } [1] "良好"
> #3.3 多条分组 > #举例 :女生身高达标标准是:>=160 > # 男神身高达标标准是:>=170 > #性别条件是1,身高条件是2 > gender <- '女' > height <- 165 > if(gender == '女'){ + print(ifelse(height >= 160, '达标', '不达标')) + }else{ + print(ifelse(height >= 170, '达标', '不达标')) + } [1] "达标" > > > gender <- '男' > height <- 169 > if(gender == '女'){ + print(ifelse(height >= 160, '达标', '不达标')) + }else{ + print(ifelse(height >= 170, '达标', '不达标')) + } [1] "不达标" #if else只能针对单个数值,当研究对象是一列向量时,if else 函数需要结合循环语句来实现
#1.将R运算结果导出为csv格式
write.csv(mydata, 'mydata.csv')
getwd()
#循环运算结果的输出
身高达标 <- NULL
for(i in 1:149){
dd <- if(mydata$性别[i] == 1){
print(ifelse(mydata$身高[i] >= 170, '达标', '不达标'))
}else{
print(ifelse(mydata$身高[i] >= 160, '达标', '不达标'))
}
身高达标 <- rbind(身高达标,dd)#纵向排列
}
mydata$身高达标 <- 身高达标
mydata <- data.frame(mydata, 身高达标)
write.csv(mydata, 'mydata.csv')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。