Tuesday, September 23, 2014

Các Hàm R phổ biến 1: đọc và biên tập dữ liệu

Các Hàm R phổ biến 1: đọc và biên tập dữ liệu
Đối với các bạn mới làm quen với R, có lẽ vấn đề nổi cộm là lúng túng, không nhớ hàm và lệnh. Tôi hiểu khó khăn đó. Dưới đây là một bảng tổng hợp các hàm cần thiết cho đọc dữ liệu, biên tập dữ liệu, phân tích mô tả, và mô hình thống kê. Tôi sắp xếp theo thứ tự của chương sách. Mô hình sắp xếp hàm là việc làm và tên hàm, một số nơi tôi cho ví dụ cụ thể. Gần như tất cả các hàm chính yếu trong sách đều được tóm lược trong bảng này. Bạn đọc có thể dùng bảng này như là một tài liệu tham khảo khi cần biết hàm R nào để phân tích dữ liệu. 


Đọc dữ liệu

Phân tích / việc
Hàm R
Đọc dữ liệu từ file dạng csv
read.csv()
Đọc dữ liệu từ file dạng text/ascii
read.table()
Đọc / nhập số liệu dạng tab delimited
read.delim()
Đọc từ SAS
library(foreign);
read.ssd()
Đọc từ SPSS
library(foreign);
read.spss()
Đọc từ Stata
library(foreign);
read.dta()
Tạo data frame
dat=data.frame(x1,x2,x3)


Biên tập dữ liệu

Phân tích / việc
Hàm R
Tạo biến mới ($)  
dat=data.frame(x1,x2);
dat$x3 = dat$x1 + dat$x2

Mã hoá dữ liệu  
dat$sex[gender=="male"] <- 1;
dat$sex[gender=="female"] <- 2
Hoán chuyển dữ liệu
as.numeric(), as.character(), as.vector(), as.matrix(), as.data.frame

Data.frame như là ma trận
dat[,1]
dat[,2:3]
dat[2,]
dat[3:8,]
dat[1:5, 2:3]

Subset dữ liệu
dat2 = subset(dat, id<=5)

Sort dữ liệu
id = c(1:5)
name = c("A","B","C","D","E")
x = c(12, 45, 67, 32, 26)
dat = data.frame(id, name, x)
new.dat = dat[order(x), ]
new.dat = dat[-order(dat$x), ]

Merge dữ liệu
dat = merge(dat1, dat2, by="id");
dat = merge(dat1, dat2, by="id", all.x=T, all.y=T)


Chuyển từ cột sang dòng
id=c(1:4)
sex=c("M","F","M","F")
group=c(1,1,2,2)
day1=c(15,16,21,31)
day2=c(17,15,23,35)
day3=c(19,20,19,33)
dat=data.frame(id,sex,group,day1,day2,day3)
require(reshape2)
dat1 = melt(dat, 
   id=c("id", "sex","group"),
   measure.vars=c("day1", "day2", "day3"))

Chuyển từ dòng sang cột
require(reshape)
dat2 = cast(dat1,
     id+sex+group ~ variable)



No comments:

Post a Comment