Liz's Blog

就是要學R #3:Data Frame 資料框架篇

| Comments

今天終於比較碰觸到比較多資料的指令,稍微複習一下前兩天學過的基礎篇矩陣篇再進入今天的課程,會比較順喔~

Udemy
課程名稱:Data Science and Machine Learning Bootcamp with R
講師:Jose Portilla

1.Data Frame
(1)查詢內建的資料框架:data()

(2)呼叫任一資料框架:ToothGrowth

(3)覺得資料太長,可以只用head或tail列出前六筆或後六筆的資料。

TG <- ToothGrowth
head(TG)
tail(TG)

(4)算出統計資料:summary(TG)

(5)顯示資料的結構:str(TG)

(6)也可以自己創vector,然後組成Data Frame。

name <- c('John','David','Jessie','Bob','Lucy')
people <- c(3,4,5,2,3)
kids <- c('T','T','T','F','F')

df <- data.frame(name,people,kids)
df

summary(df)
str(df)

2.Data Frame索引及指定特定元素(沿用以上資料)
(1)和vector、matrix的方法一樣,使用[]來指定座標。

df[2,]
df[,2]

(2)也可以指定特定的欄位。

df[,'poeple']
df[1:5,c('name','people')]

(3)想得到特定欄位資料(注意這會以vector形式出現):df$people

(4)一樣是取得特定欄位資料,但會以matrix形式出現:df['people']

(5)過濾某些資料的用法

subset(df,subset==kids==TRUE)
subset(df,subset= people>3)

(6)由小到大的排序(兩個都會得到一樣的結果)

sorted.household <- order(df['people'])
df[sorted.household,]

sorted.household
sort.household <- order(df$poeple)
df[sort.household,]

(7)由大到小的排序

desc.household <- order(-df['people'])
df[desc.household,]

3.把兩個Data Frame組合起來

name <- c('John','David','Jessie','Bob','Lucy')
people <- c(3,4,5,2,3)
kids <- c('T','T','T','F','F')

df <- data.frame(name,people,kids)

city <- c('TPE','TPE','KH','KH','TPE')
subscription <- c('F','T','F','T','T')

df2 <- data.frame(name,city,subscription)

m1 <- merge(df, df2, by.x = 'name')
m1

輸出:
name people kids city subscription
1 Bob 2 F KH T
2 David 4 T TPE T
3 Jessie 5 T KH F
4 John 3 T TPE F
5 Lucy 3 F TPE T

4.Data Frame綜合運算
(1)做出Data Frame

empty <- data.frame()
c1 <- 1:5
c2 <- letter[1:5]
df <- data.frame(col.name.1=c1,col.name.2=c2)
df

(2)

nrow(df)     #算有幾橫排
ncol(df)     #算有幾行
colnames(df) #問行的名稱     
rownames(df) #問橫排的名稱

(3)

df[[1,3]]                 #得到特定元素
df[1:2,2:3]               #得到特定矩陣
df[2,'col.name.1'] <- 15  #適用想更改特定位置數值

(4)

rowdf <- df[2,]           
rowdf                     #會得到data frame

(5)

head(ToothGrowth)         #出現前六排data frame

ToothGrowth$dose          #皆會得到ToothGrowth的dose的數值,並以vector的形式出現
ToothGrowth[,'dose']
ToothGrowth[,3]
ToothGrowth[['dose']]
ToothGrowth[['dose']      #皆會得到ToothGrowth的dose的數值,並以matrix的形式出現
ToothGrowth[3]

(6)

df2 <- data.frame(col.name.1=100,col.name.2='good')
df2

dfcom <- rbind(df,df2)                              #增加每排的資料
dfcom

df$newcol <- rep(NA, nrow(df))                      #增加列(增加NA列)
df

df$copy.of.col2 <- df$col.name.2                    #增加列(複製特定列)
df

df[[''col.2times'']] <- df$col.name.1 * 2           #增加列(某列數值乘以二)
df

df3 <- cbind(df,df$col.name.2)
df3

(7)

colnames(df)[1] <- 'number'     #改特定欄位名稱
df
colnames(df) <- c('number','order','option','order2','2times')    #改整列名稱
df

(8)選擇特定橫排

df[1:4,]
head(df,4)

選擇特定條件資料

df[(df.2times > 4 & df$number <3)]
subset(df,2times>4 & df$number <3)

(9)選擇特定行

df[,c(1,2,3)]
df[,-1]
df[,-c(2,4)]

(10)找看看有沒有是NA的欄位

any(is.na(ToothGrowth))                
any(is.na(TootheGorwh$dose))
ToothGrowth[!is.na(ToothGrowth$dose),]
ToothGrowth[is.na(TootheGrowth)] <- 0
ToothGrowth$dose[is.na(TootheGrowth$dose)] <- 1

Comments

comments powered by Disqus