R语言实战

5. 缺失值

> y <- c(1,2,3,NA)
> is.na(y)
[1] FALSE FALSE FALSE  TRUE
> leadership
  manager testDate country gender age item1 item2 item3 item4 item5
1       1 10/24/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/08      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
  stringAsFactors agecat
1           FALSE  Young
2           FALSE  Young
3           FALSE  Young
4           FALSE  Young
5           FALSE   <NA>
> leadership[,6:10]
  item1 item2 item3 item4 item5
1     5     4     5     5     5
2     3     5     2     5     5
3     3     5     5     5     2
4     3     3     4    NA    NA
5     2     2     1     2     1
> 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
> 

5.1 重编码某些值为缺失值

> leadership$age[leadership$age == 99] <- NA
> leadership$age
[1] 32 45 25 39 NA
> 

5.2 在分析中排除缺失值

> x <- c(1,2,NA,3)
> y <- x[1] + x[2] + x[3] + x[4]
> z <- sum(x)
> x
[1]  1  2 NA  3
> y
[1] NA
> z
[1] NA
> 
> 
> x <- c(1,2,NA,3)
> y <- sum(x, na.rm=TRUE)
> 
> X
Error: object 'X' not found
> x
[1]  1  2 NA  3
> y
[1] 6
> leadership
  manager testDate country gender age item1 item2 item3 item4 item5
1       1 10/24/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/08      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
  stringAsFactors agecat
1           FALSE  Young
2           FALSE  Young
3           FALSE  Young
4           FALSE  Young
5           FALSE   <NA>
> newdata <- na.omit(leadership)
> newdata
  manager testDate country gender age item1 item2 item3 item4 item5
1       1 10/24/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/08      UK      F  25     3     5     5     5     2
  stringAsFactors agecat
1           FALSE  Young
2           FALSE  Young
3           FALSE  Young
> 

6. 日期值

> mydates <- as.Date(c("2007-06-22", "2004-02-13"))
> mydates
[1] "2007-06-22" "2004-02-13"
> 
> 
> strDates <- c("01/05/1965", "08/16/1975")
> strDates
[1] "01/05/1965" "08/16/1975"
> dates <- as.Date(strDates, "%m/%d/%Y")
> dates
[1] "1965-01-05" "1975-08-16"
> 
> myformat <- "%m/%d/%y"
> leadership$date <- as.Date(leadership$date, myformat)
Error in as.Date.default(leadership$date, myformat) : 
  do not know how to convert 'leadership$date' to class “Date”
> leadership$testdate <- as.Date(leadership$date, myformat)
Error in as.Date.default(leadership$date, myformat) : 
  do not know how to convert 'leadership$date' to class “Date”
> leadership$testDate <- as.Date(leadership$testDate, myformat)
> leadership$testDate
[1] "2008-10-24" "2008-10-28" "2008-10-01" "2008-10-12" "2009-05-01"
> leadership
  manager   testDate country gender age item1 item2 item3 item4 item5
1       1 2008-10-24      US      M  32     5     4     5     5     5
2       2 2008-10-28      US      F  45     3     5     2     5     5
3       3 2008-10-01      UK      F  25     3     5     5     5     2
4       4 2008-10-12      UK      M  39     3     3     4    NA    NA
5       5 2009-05-01      UK      F  NA     2     2     1     2     1
  stringAsFactors agecat
1           FALSE  Young
2           FALSE  Young
3           FALSE  Young
4           FALSE  Young
5           FALSE   <NA>
> 
> Sys.Date()
[1] "2017-09-07"
> date()
[1] "Thu Sep 07 22:40:04 2017"
> today <- Sys.Date()
> format(today, format="%B %d %Y")
[1] "September 07 2017"
> format(today, format="%A")
[1] "Thursday"
> 
> 
> startdate <- as.Date("2004-02-13")
> enddate <- as.Date("2011-01-22")
> days <- enddate - startdate
> days
Time difference of 2535 days
> 
> 
> today <- Sys.Date()
> dob <- as.Date("1988-06-30")
> difftime(today, dob, units="weeks")
Time difference of 1523 weeks
> difftime(today, dob, units="days")
Time difference of 10661 days
> format(dob, format="%A")
[1] "Thursday"
> format(as.Date("2017-09-07"), format="%A")
[1] "Thursday"
> format(as.Date("2017-09-06"), format="%A")
[1] "Wednesday"
> 

6.1 将日期转换为字符型变量

> dates
[1] "1965-01-05" "1975-08-16"
> strDates <- as.character(dates)
> strDates
[1] "1965-01-05" "1975-08-16"
> 

6.2 更进一步

help(as.Date)

help(strftime)

help(ISOdatetime)

lubridate 包

fCalendar 包

7. 类型转换

> a <- c(1, 2, 3)
> a
[1] 1 2 3
> is.numeric(a)
[1] TRUE
> is.vector(a)
[1] TRUE
> 
> a <- as.character(a)
> a
[1] "1" "2" "3"
> is.numeric(a)
[1] FALSE
> is.vector(a)
[1] TRUE
> is.character(a)
[1] TRUE
> 
原文地址:https://www.cnblogs.com/wnzhong/p/7492480.html