1. 程式人生 > >R語言基本資料管理

R語言基本資料管理

建立新變數並整合到原來的資料框中:

my_data <- transform(my_data,
                     sum_x = x1 + x2,
                     mean_x = (x1 + x2)/2)

變數的重編碼:

leadership <- within(leadship,{
                     agecat <- NA
                     agecat[age > 75]              <- "Elder"
                     agecat[age >= 55 & age <= 75] <- "Middle Aged"
                     agecat[age <55]               <- "Young"})

函式names()用來重新命名變數:

names(leadership)[2] <- "test_data"
names(leadership)[6:10] <- c("a","b","c","d","e")

library(plyr)
leadership <- rename(leadership,
                     c(old_name="new_name",oldname="newname"))

缺失值

在R中,缺失值以符號NA表示,字元型和數值型使用的缺失值符號是相同的。函式is.na()用來檢測缺失值是否存在。

好多函式都擁有一個na.rm=TRUE選項,可以在計算之前移除缺失值並使用剩餘值進行計算。

函式na.omit()移除 所有含有缺失值的觀測。

日期值

日期值通常以字串的形式輸入到R中,然後轉換為以數值形式儲存的目的變數,通過函式as.Date()進行轉換,預設格式為yyyy-mm-dd。

my_format <- "%m/%d/%y"
my_data <- as.Date(my_data,my_format)

函式Sys.Date()返回當天的日期,date()返回當前的日期和時間。

日期格式
符號 含義 示例
%d 數字表示的日期 0~31
%a 縮寫的星期名 Mon
%A 非縮寫的星期名 Monday
%m 月份(00~12) 00~12
%b 縮寫的月份 Jan
%B 非縮寫的月份 January
%y 兩位數的年份 18
%Y 四位數的年份 2018

函式format(date,output="out_format")對日期進行格式化輸出。

> format(date(),format="%A")
[1] "Sat Nov 17 13:39:09 2018"

函式difftime()用來計算日期的間隔。

> Sys.Date()
[1] "2018-11-17"
> today <- Sys.Date()
> birthday <- as.Date("1990-08-30")
> difftime(today,birthday,units = "days")
Time difference of 10306 days

as.character()可以將日期格式轉換為字元型。

資料排序

函式order()進行排序,預設是升序,變數前面加負號為降序。

attach(leadership)
newdata <-leadership[order(gender, -age),]
detach(leadership)

合併資料框

按某個變數進行橫向合併用merge();直接橫向合併用cbind(),但必須保證兩資料框的行數相同。

縱向合併兩資料框用rbind()函式。

資料集取子集

通過data_frame[row_name,col_name]來進行訪問。

在某一列名前面加上符號就會剔除該列。

函式subset()是選擇變數最簡單的方法:

newdata <- subset(leadership, age >= 35 | age < 24,
                  select=c(q1, q2, q3, q4))
newdata <- subset(leadership,gender == "M" & age > 25,
                  select=gender:q4)

隨機抽樣

無放回抽樣:

mysample <- leadership[sample(1:nrow(leadership), 3, replace=FALSE),]

高階抽樣的包:sampling、survey。

SQL語句操作資料框

sqldf包:

library(sqldf)
new_data <- sqldf("SELECT * FROM dataframe",
                  row.names = TRUE)   #row.names=TRUE將原始資料框的行名延伸到新資料框中