搜尋感興趣的網誌

所有文章連結

2022年3月24日 星期四

R basic operation | R基礎操作

 


在認識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[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")

沒有留言:

張貼留言

其他文章

看看精選文章

納希克房價分析 | Nashik Apartment Price Analyze – 語法解析(上)

  這次 Nashik 的房價分析有上傳至 Kaggle ,有興趣的朋友可以前往閱覽, RMarkdown PDF 報告存放在 Google 雲端,程式碼則是存放於 Github ,照慣例會分享好用的函式語法,雖說基本的 Packages 與語法可能很多人都會完整的閱覽,但是實際...