在認識R語言之前,小雷已經有上過Python的課程,所以一開接觸R,對於一些操作有點搞不清楚,多嘗試幾次後才慢慢熟練,這篇希望介紹一些基礎的語法,也會不定期更新基礎的操作。
關於R Packages介紹 >> 請點我
R語言的輸入輸出 >> 請點我
基礎操作
賦值<- : 賦值的用意在於將右邊的值賦予到左邊的變量之中,中間用的是” <- “,類似一個方向的箭頭,在python中就只是簡單的” = ”,R的賦值不是很好輸入,所以若是用VScode就需要設定快捷鍵,RStudio則是本身就有快捷鍵,若是方向相反,則意義相反,但好像不是那麼常用到就是了。
# 賦值 <-
num_df <- tibble(number = c(1,2,3,4,5,6,7,8,9))
num_df <- tibble(number = c(1,2,3,4,5,6,7,8,9))
- 範圍選取[] : 有時數據集中的數據過多,想先選擇一個範圍,或是要刪除某些值時就會用到,寫法上要注意的是最末端一定要加一個逗點作為結束,否則會出現錯誤。
# 錯誤的輸入
num_df[1:5]
# 輸出結果
Error: Can't subset columns that don't exist.
x Locations 2, 3, 4, and 5 don't exist.
i There are only 1 column.
# 選取範圍(變量中的範圍,不是特定值)
num_df[1:5, ]
# 輸出結果
r$> num_df[1:5, ]
# A tibble: 5 x 1
number
<dbl>
1 1
2 2
3 3
4 4
5 5
# 選取特定值
num_df <- num_df[num_df$number < 3, ]
# 輸出結果
r$> num_df
# A tibble: 2 x 1
number
<dbl>
1 1
2 2
num_df[1:5]
# 輸出結果
Error: Can't subset columns that don't exist.
x Locations 2, 3, 4, and 5 don't exist.
i There are only 1 column.
# 選取範圍(變量中的範圍,不是特定值)
num_df[1:5, ]
# 輸出結果
r$> num_df[1:5, ]
# A tibble: 5 x 1
number
<dbl>
1 1
2 2
3 3
4 4
5 5
# 選取特定值
num_df <- num_df[num_df$number < 3, ]
# 輸出結果
r$> num_df
# A tibble: 2 x 1
number
<dbl>
1 1
2 2
- Pipes通道%>% : 這個也是R裡面很特別的語法,用意是連結不同的函數,將各個函數的輸出應用到其他的函數上,使的好理解與閱讀,缺點是不好輸入,沒有快捷鍵實在是不好打,這部分Python就顯得人性化許多,一個tab就解決了。
# 利用pipes結合其他函數
num_df <- num_df %>%
select(number) %>%
filter(number > 3)
# 輸出結果
$> num_df
# A tibble: 6 x 1
number
<dbl>
1 4
2 5
3 6
4 7
5 8
6 9
- 鎖定數據集欄位變量$ : 用於告訴R,現在要操作的是哪一個欄位變量,或是要將數值操作傳回哪一個欄位變量,有時候沒有指定時,會將整個數據集覆蓋掉,這個也是比較特別的用法。
# 創建一個tibble存入數值
num_df <- tibble(
number = c(1,2,3,4,5,6,7,8,9),
letter = c("a", "b", "c", "d", "e", "f", "g", "h", "j"))
# 使用$告訴R要修改哪個欄位的數值
num_df$letter <- recode(num_df$letter, "a" = "apple")
# 輸出結果
$> num_df
# A tibble: 9 x 2
number letter
<dbl> <chr>
1 1 apple
2 2 b
3 3 c
4 4 d
5 5 e
6 6 f
7 7 g
8 8 h
9 9 j
# 忘記指定欄位時結果
num_df <- recode(num_df$letter, "a" = "apple")
# 原本的number欄位被覆蓋掉了
r$> head(num_df)
[1] "apple" "b" "c" "d" "e" "f"
- 移除 ! : 這個操作上也不是那麼的直覺,基本上刪除時會以row為單位,整行刪光光,所以覆蓋回去時反而不需要$,以下放上兩種操作方式
# 創建一個tibble存入數值
num_df <- tibble(
number = c(1,2,-1),
letter = c("a", "b", "c")
)
r$> num_df
# A tibble: 3 x 2
number letter
<dbl> <chr>
1 1 a
2 2 b
3 -1 c
# 賦值左邊指定變量
num_df$number <- num_df[!(num_df$number < 0), ]
# 無法操作,因為行數會不相同
$> num_df$number <- num_df[!(num_df$number < 0), ]
Error: Assigned data `num_df[!(num_df$number < 0), ]` must be compatible with existing data.
x Existing data has 3 rows.
x Assigned data has 2 rows.
i Only vectors of size 1 are recycled.
# 賦值回整份數據
num_df <- num_df[!(num_df$number < 0), ]
# 輸出結果
r$> num_df
# A tibble: 2 x 2
number letter
<dbl> <chr>
1 1 a
2 2 b
- 參數欄位變量 = : 各個函數內若有參數要修改,指定的方式就不是<-了,但若是逗點", ",意思就是不同的變量做個區隔
num_df <- tibble(
number = c(1,2,-1),
letter = c("a", "b", "c")
)
- ggplot 的函數連結 + : 整理完需要繪圖時R基本應該就是用ggplot了,ggplot的各個函數連結時用的是加號,一開始常常會跟<-或是%>%搞混
# 正常用法
num_df <- num_df %>%
ggplot(mapping = aes(
x = number,
y = letter)) +
geom_point()
# 錯誤用法
num_df <- num_df %>%
ggplot(mapping = aes(
x = number,
y = letter)) %>%
geom_point()
r$> # 錯誤用法
num_df <- num_df %>%
ggplot(mapping = aes(
x = number,
y = letter)) %>%
geom_point()
Error: `data` must be a data frame, or other object coercible by `
- 載入Packages : Python的載入方式是import(),R則是library(),至於為什麼?這個可能要問R的原始作者George Ross Ihaka與Robert Clifford Gentleman兩位神人大大了😂
library(tidyverse)
library(lubridate)
library(dplyr)
- 安裝Packages : 比Python多了個packages,不過也只是安裝一次,倒是沒有甚麼影響。
install.packages("dplyr")
沒有留言:
張貼留言