R语言变量的重命名和一些处理
一致报错:Error in data.frame(manager, date, country, gender, age, q1, q2, q3, q4, :
参数值意味着不同的行数: 4, 5
网上查了一下是因为有的向量行数为4有的为5造成的;manager,date,country,gender,age,q1,q2,q3,q4,q5的行数不一样多,有的4行,有的5行,就报错
> manager<-c(1,2,3,4) #4行 > date<-c("10/14/08","10/28/08","10/1/18","10/12/08","5/1/09") #五行 > country<-c("us","us","uk","uk") #4行 > gender<-c("M","F","F","M","F") > age<-c(32,45,25,39,99) > q1<-c(5,3,3,3,2) > q2<-c(4,5,5,3,2) > q3<-c(5,2,5,4,1) > q4<-c(5,5,5,NA,2) > q5<-c(5,5,2,NA,1) > leadership<-data.frame(manager,date,country,gender,age,q1,q2,q3,q4,q5,stringSASFactors=FALSE) Error in data.frame(manager, date, country, gender, age, q1, q2, q3, q4, : 参数值意味着不同的行数: 4, 5, 1 > leadership Error: object 'leadership' not found > leadership<-data.frame(manager,date,country,gender,age,q1,q2,q3,q4,q5,stringsAsFactors=FALSE) Error in data.frame(manager, date, country, gender, age, q1, q2, q3, q4, : 参数值意味着不同的行数: 4, 5 > leadership<-data.frame(manager,date,country,gender,age,+ q1,q2,q3,q4,q5,stringsAsFactors=FALSE) Error in data.frame(manager, date, country, gender, age, q1, q2, q3, q4, : 参数值意味着不同的行数: 4, 5
经过修改后运行成功 :
> manager<-c(1,2,3,4,5) > date<-c("10/14/08","10/28/08","10/1/18","10/12/08","5/1/09") > country<-c("us","us","uk","uk","uk") > gender<-c("M","F","F","M","F") > age<-c(32,45,25,39,99) > q1<-c(5,3,3,3,2) > q2<-c(4,5,5,3,2) > q3<-c(5,2,5,4,1) > q4<-c(5,5,5,NA,2) > q5<-c(5,5,2,NA,1) > leadership <-data.frame(manager,date,country,gender,age,q1,q2,q3,q4,q5,stringsAsFactors=FALSE) > leadership manager date country gender age q1 q2 q3 q4 q5 1 1 10/14/08 us M 32 5 4 5 5 5 2 2 10/28/08 us F 45 3 5 2 5 5 3 3 10/1/18 uk F 25 3 5 5 5 2 4 4 10/12/08 uk M 39 3 3 4 NA NA 5 5 5/1/09 uk F 99 2 2 1 2 1 > #表中有缺失值还有一些比较奇怪的值,要把manager改为managerID,date改为dateTest > #需要导包reshape > install.packages("reshape") trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.2/reshape_0.8.5.zip'Content type 'application/zip' length 127545 bytes (124 KB)downloaded 124 KB package ‘reshape’ successfully unpacked and MD5 sums checked The downloaded binary packages are in C:\Users\Administrator\AppData\Local\Temp\RtmpEbBcQf\downloaded_packages > library("reshape") Warning message:程辑包‘reshape’是用R版本3.2.5 来建造的 > #然后对leadership的变量进行重新赋值 > leadership<-rename(leadership,c(manager="managerID",date="testDate")) > leadership managerID testDate country gender age q1 q2 q3 q4 q5 1 1 10/14/08 us M 32 5 4 5 5 5 2 2 10/28/08 us F 45 3 5 2 5 5 3 3 10/1/18 uk F 25 3 5 5 5 2 4 4 10/12/08 uk M 39 3 3 4 NA NA 5 5 5/1/09 uk F 99 2 2 1 2 1 > names(leadership)[6:10]<-c("item1","item2","item3","item4","item5") > leadership managerID testDate country gender age item1 item2 item3 item4 item5 1 1 10/14/08 us M 32 5 4 5 5 5 2 2 10/28/08 us F 45 3 5 2 5 5 3 3 10/1/18 uk F 25 3 5 5 5 2 4 4 10/12/08 uk M 39 3 3 4 NA NA 5 5 5/1/09 uk F 99 2 2 1 2 1 > #函数is.na()判断是否有缺失值:is.na()作用在对象上的原理:它返回相同大小的对象,如果某一个位置是缺失值,则相应的位置会被改写成true,否则改写为false > y<-c(1,2,NA,4) > is.na(y) [1] FALSE FALSE TRUE FALSE > is.na(leadership[,6:10]) item1 item2 item3 item4 item5 [1,] FALSE FALSE FALSE FALSE FALSE [2,] FALSE FALSE FALSE FALSE FALSE [3,] FALSE FALSE FALSE FALSE FALSE [4,] FALSE FALSE FALSE TRUE TRUE [5,] FALSE FALSE FALSE FALSE FALSE
install.packages("reshape")
library("reshape")
#然后对leadership的变量进行重新赋值
leadership<-rename(leadership,c(manager="managerID",date="testDate"))
#把列名修改为我们需要的列名还可以使用names()函数;把q1-15变为item1-item5
names(leadership)[6:10]<-c("item1","item2","item3","item4","item5")
#函数is.na()判断是否有缺失值:is.na()作用在对象上的原理:它返回相同大小的对象,如果某一个位置是缺失值,则相应的位置会被改写成true,否则改写为false
y<-c(1,2,NA,4)
is.na(y)
#现在把is.na()应用到leadershipshang
is.na(leadership[,6:10])
#有关重编码有些值是缺失值的情况
#年龄中有个是99,他会把年龄的平均值拉高的离谱,所以要把99表示为缺失值
leadership$age[leadership$age==99]<-NA
#在分析当中是如何来排除缺失值的;
#在含有缺失值的算术表达式它的结果也是缺失值
sum<-y[1]+y[2]+y[3]+y[4]
sum
#由于y的第四个值是缺失值所以导致了整个结果也是缺失值
#现在对缺失值进行处理,用na.rm把缺失值删除
sum<-sum(y,na.rm=TRUE)
sum
> leadership$age[leadership$age==99]<-NA > leadership managerID testDate country gender age item1 item2 item3 item4 item5 1 1 10/14/08 us M 32 5 4 5 5 5 2 2 10/28/08 us F 45 3 5 2 5 5 3 3 10/1/18 uk F 25 3 5 5 5 2 4 4 10/12/08 uk M 39 3 3 4 NA NA 5 5 5/1/09 uk F NA 2 2 1 2 1 > sum<-y[1]+y[2]+y[3]+y[4] > sum [1] NA > sum<-sum(y,na.rm=TRUE) > sum [1] 7
na.omit()函数,可以移除所有含有缺失值的行;
删除所有含有缺失值的观测,称之为行删除;处理不完整数据集的一个手段;
如果只有一小部分缺失值,或者缺失值只集中在一小部分观测数据中,则行删除是可以采取的;但是如果含有大量的缺失值则需要更为合理的缺失值处理方法;
> newData<-na.omit(leadership) > leadership managerID testDate country gender age item1 item2 item3 item4 item5 1 1 10/14/08 us M 32 5 4 5 5 5 2 2 10/28/08 us F 45 3 5 2 5 5 3 3 10/1/18 uk F 25 3 5 5 5 2 4 4 10/12/08 uk M 39 3 3 4 NA NA 5 5 5/1/09 uk F NA 2 2 1 2 1 > newData managerID testDate country gender age item1 item2 item3 item4 item5 1 1 10/14/08 us M 32 5 4 5 5 5 2 2 10/28/08 us F 45 3 5 2 5 5 3 3 10/1/18 uk F 25 3 5 5 5 2
R语言中日期值的处理:
日期值通常以字符串的形式存输入到R中,然后转化为用数值的形式存储的变量;
X.data()
newData<-na.omit(leadership)
newData
data1<-as.Date("2016-5-23","2016-5-22")
data1
strDates<-c("01/05/1965","08/19/2013")
date2<-as.Date(strDates,"%m/%d/%Y")
date2
#输出当前系统时间
Sys.Date()
#还可以使用date()函数
date()
#用format指定输入的格式
today<-Sys.Date()
format(today,format="%B %d %Y")
#距离周末的情况%A(输入星期几)
format(today,format="%A")
#求日期之差
starDate<-as.Date("2016-2-10")
endDate<-as.Date("2016-5-23")
days<-endDate-starDate
Days
birthday<-as.Date("1972-01-14")
difftime(today,birthday,units = "weeks")
#字符串
strDates<-as.character(today)
strDates
> data1<-as.Date("2016-5-23","2016-5-22") > data1[1] NA > strDates<-c("01/05/1965","08/19/2013") > date2<-as.Date(strDates,"%m/%d/%Y") > date2 [1] "1965-01-05" "2013-08-19" > Sys.Date() [1] "2016-05-23" > date() [1] "Mon May 23 17:00:34 2016" > today<-Sys.Date() > format(today,format="%B %d %Y") [1] "五月 23 2016" > format(today,format="%A") [1] "星期一" > #求日期之差 > starDate<-as.Date("2016-2-10") > endDate<-as.Date("2016-5-23") > days<-endDate-starDate > days Time difference of 103 days > birthday<-as.Date("1972-01-14") > difftime(today,birthday,units = "weeks") Time difference of 2314.429 weeks > strDates<-as.character(today) > strDates [1] "2016-05-23"
R语言提供了判断某个对象的数据类型以及将其转化为另一种数据类型的函数;向一个数值型向量添加一个字符串,会将向量的所有元素都转化为字符型;
> a<-c(1,2,3) > #判断a是不是数值型 > is.numeric(a) [1] TRUE > #判断a是不是向量 > is.vector(a) [1] TRUE > #把a转化为字符型 > a<-as.character(a) > a [1] "1" "2" "3" > #在判断a是不是数值型的 > is.numeric(a) [1] FALSE > #在判断a是不是字符型的 > is.character(a) [1] TRUE > #在判断a是不是向量 > is.vector(a) [1] TRUE > #在判断a是不是矩阵 > is.matrix(a) [1] FALSE > #在判断a是不是数值型的 > is.data.frame(a) [1] FALSE > #在判断a是不是因子 > is.factor(a) [1] FALSE