手動輸入一個 1995 至 1996 年球季芝加哥公牛隊先發陣容的資料框,這是一個 5 x 2 的資料框,紀錄五個先發球員的背號與姓名。
numbers <- c(9, 23, 33, 91, 13)
players <- c("Ron Harper", "Michael Jordan", "Scottie Pippen", "Dennis Rodman", "Luc Longley")
df <- data.frame(number = numbers, player = players, stringsAsFactors = FALSE) #資料框預設儲存文字的型別是一種稱為 factor 的型別
dim(df )
head(df) # 查看前六列觀測值
tail(df) # 查看末六列觀測值
str(df) # 查看資料框的複合資訊
summary(df) # 查看描述性統計
dim(df) # 查看資料框的外觀
nrow(df) # 查看資料框有幾個列
ncol(df) # 查看資料框有幾個欄
colnames(df) # 查看資料框所有的變數名稱
row.names(df)[1:6] # 查看資料框的列索引值
df[c(2, 3, 4), ] # 透過位置
is_trio <- df$number %in% c(23, 33, 91) # 透過球衣背號
is_trio
df[is_trio, ]
is_trio <- df$player %in% c("Michael Jordan", "Scottie Pippen", "Dennis Rodman") # 透過球員姓名
is_trio
df[is_trio, ]
[備註]. 在Anaconda中要用 conda install -c r r-dplyr
#install.packages("tidyverse")
#install.packages("dplyr")
#devtools::install_github("tidyverse/dplyr")
#install.packages("magrittr")
#library(magrittr)
library(dplyr)
#library(tidyverse)
df %>% filter(number %in% c(23, 33, 91)) # A %in% B:A 是否在 B 中
# filter(player %in% c("Michael Jordan", "Scottie Pippen", "Dennis Rodman"))
透過 df$col 或 df[, "col"] 選擇單一個變數,這時會轉換為 vector,透過 df[, c("col1", "col2")] 則能夠選出資料框中的多個變數,這時型別依然是資料框
df$player
df[, "player"]
df[, c("player", "number")] #你會發現兩欄對調了
df %>%
select(player, number)
#依照變數位置選擇
df[, 2]
df[, c(2, 1)]
依照某個或多個變數大小排序整個資料框的觀測值是常見的應用,可以遞增排序(由小到大)或者遞減排序(由大到小)
df %>%
arrange(number) %>% # 依照 number遞增排序
head()
df %>%
arrange(desc(number)) %>% # 依照 number遞減排序
head()
此三種是隱函迴圈的做法
# R 語言中可以透過 sapply() 函數實踐向量計算,將完成計算的向量直接指派回資料框中即可。
# 使用互動式操作來使用 R 的狀況來說,使用 sapply 函數會比較方便,就算使用者不確定執行結果會是什麼,它通常都可以自動將結果以最適合的方式呈現。
get_last_name <- function(x) {
split_lst <- strsplit(x, split = " ")
name_length <- length(split_lst[[1]])
last_name <- split_lst[[1]][name_length]
return(last_name)
}
df$last_name <- sapply(df$player, FUN = get_last_name)
#View(df)
df
#輸入一個值:隊伍名稱 "Chicago Bulls" ,或者輸入五個球員的身高:
df$team <- "Chicago Bulls"
df$height <- c("6-6", "6-6", "6-8", "6-7", "7-2")
df
#或是採用 dplyr 套件的 mutate() 函數
df1 <- df %>%
mutate(
team = "Chicago Bulls",
height = c("6-6", "6-6", "6-8", "6-7", "7-2")
)
df1
library(MASS)
toni_kukoc <- data.frame(number = 7, player = "Toni Kukoc", last_name="Kukoc", team="Chicago Bulls", height="6-11", stringsAsFactors = FALSE)
df2 <- rbind (df, toni_kukoc)
df2