[R筆記] 第4回 資料操作 - 1

R中的資料操作

在R中的運算符號與其他語言大同小異,包含加(+)减(-)乘(*)除(/)、次方(^或**)、取餘數(mod: x%%y)及整数除法(x%/%y)。
邏輯運算符號皆差不多,大於(>)小於(<)等於(==)等等,而OR(x | y)及AND(x & y)是用一個運算符號表示。 如果收集到的資料,有無意義的資料時,那就應該將該筆資料訂為NA(Not Available)。假設某一特定年齡區間的資料,才是有意義的資料,那就可以設定一個條件,將不符合該條件的data接設定為NA。
> name <- c("Alice", "Bill", "Cindy", "David", "Eason")
> age <- c(-12, 23, 21, 27, 63)
> df <- data.frame(name, age)
> df
   name age
1 Alice -12
2  Bill  23
3 Cindy  21
4 David  27
5 Eason  63
> rule <- df$age < 20 | df$age > 29
> df$age[rule] <- NA
> df
   name age
1 Alice  NA
2  Bill  23
3 Cindy  21
4 David  27
5 Eason  NA

## just put the condition in bracket 
> df$age[df$age < 20 | df$age > 29] <- NA
variable[condition] <- expression,當condition為TRUE時,就會將variable設為expression。

再來多敘述一下NA,NA是定義為不完整的資料,如果用'=='來比對NA是不會為TRUE的。而NaN(Not a Number)是NA的一種,是在運算上會出現的結果,像是除法中分母為0的情況。is.na及is.nan是能幫助我們辨別NA及NaN的方法。如果運算的資料中有NA的資料,那麼運算的結果就會是NA的一種。
> naVar <- NA
> naVar == NA
[1] NA

## try is.na() & is.nan()
> x <- c(1, 2, NaN, NA, 4)
> is.na(x)
[1] FALSE FALSE  TRUE  TRUE FALSE
> is.nan(x)
[1] FALSE FALSE  TRUE FALSE FALSE

> x <- c(1, 2, NA, 4)
> y <- sum(x)
> y
[1] NA
> x <- c(1, 2, NaN, NA, 4)
> y <- sum(x)
> y
[1] NaN
> y <- sum(x, na.rm = TRUE)
> y
[1] 7
如果要將一row的無效data刪除,那麼就直接用na.omit的方法,用上面出現過的df來試試。
> df
   name age
1 Alice  NA
2  Bill  23
3 Cindy  21
4 David  27
5 Eason  NA
> vaildDf <- na.omit(df)
> vaildDf
   name age
2  Bill  23
3 Cindy  21
4 David  27
如果要修改data frame中的變量名稱,可以用names或rename來修改,指令為rename(dataframe, c(oldName = "newName", ...))。
使用rename時,需要載入reshape library,如果R中沒有,就先用install.packages()安裝。
> library(reshape)
Error in library(reshape) : there is no package called ‘reshape’
> install.packages('reshape')
> library(reshape)

## use rename function
> rename(df, c(name = "id"))
     id age
1 Alice -12
2  Bill  23
3 Cindy  21
4 David  27
5 Eason  63

## use names function
> names(df)[1] <- "name"
> df
   name age
1 Alice -12
2  Bill  23
3 Cindy  21
4 David  27
5 Eason  63
> names(df)[1:2] <- c("Tester", "TesterAge")
> df
  Tester TesterAge
1  Alice       -12
2   Bill        23
3  Cindy        21
4  David        27
5  Eason        63

沒有留言:

張貼留言