R語言基本資料管理
阿新 • • 發佈:2018-11-19
建立新變數並整合到原來的資料框中:
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將原始資料框的行名延伸到新資料框中