R語言數據的輸入和輸出操作

數據的載入

R本身已經提供瞭超過50個數據集,而在眾多功能包中,默認的數據集被存放在datasets程序包中,通過函數data()k可以查看系統提供所有的數據包,同時可以通過函數library()加載程序包中的數據。

矩陣型數據最常用的讀取方式是read.table()具體的調用格式是()

read.table(file, header = FALSE, sep = "", quote = "\"'",dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"),row.names, col.names, as.is = !stringsAsFactors,
           na.strings = "NA", colClasses = NA, nrows = -1,skip = 0, check.names = TRUE, fill = !blank.lines.skip,strip.white = FALSE, blank.lines.skip = TRUE,
           comment.char = "#",allowEscapes = FALSE, flush = FALSE,stringsAsFactors = default.stringsAsFactors(), fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)

file是要讀的數據文件名稱;header = TURE表示文件第一行變化變量名,sep = “”表示文件中的分割符為空格,dec = “.”用來表示小數點的字符,

row.names, col.names,用來表示向量的行名與列名, na.strings = “NA”用來表示缺失值,skip = 0跳過前幾行

讀入數據後,可以通過簡單的函數來查看數據的基本信息。mode(),names(),dim(), 且使用attach()函數,便可以直接通過變量名來獲取變量中的信息,函數detach()用於執行相反的操作。

處理其他格式的軟件

當數據量較少時,在EXCEL中復制好要用的數據然後導入到R中。

> data.excel = read.delim("clipboard")
> data.excel
    X X1 X2       value
1   1 Be Be  1.00000000
2   2  B Be -0.20154586
3   3 Mg Be -0.31724811
4   4 Al Be -0.03359098

當數據量很多時,利用RODBC軟件包(提供r和各類數據庫的一個借口如access和SQL server等)所提供的方法便可以實現對Excel數據的直接訪問~

讀取來自網頁的數據

在實際的應用中,從網站上直接獲取數據也是非常常見的,例如國傢統計局官方發佈的權威統計數據,中國人民銀行網站發佈的經濟數據或其他專業財經網站提供的股市、期貨、債券數據都是進行宏觀數據分析工作時常用的數據源。R讀取網頁中的HTML表格數據,需要用到XML程序包提供的readHTMLTable()函數。

readHTMLTable(doc, header = NA,
              colClasses = NULL, skip.rows = integer(), trim = TRUE,
              elFun = xmlValue, as.data.frame = TRUE, which = integer(),
               ...)

doc給出的是HTML文件或者網頁地址,which是返回網頁中的那幾個表格,註意如果網址較長沒在輸入時需要換行,使用函數gsub將字符中的換行符刪去。

baseURL = gsub("\\n", "", baseURL)

數據的保存

數據處理的結果或者中間結果應該被妥善保存,最基本的保存工作的函數為cat()函數。

cat(... , file = "", sep = " ", fill = FALSE, labels = NULL, append = FALSE)

參數file指定瞭輸出的文件名,若文件已存在則原來的內容將被覆蓋,若將參數append = T,則是在文件末尾追加內容。

> car = file("K:/car.txt")
> cat("Make lp100km mass.kg List.price", "\"Alpha Remeo\" 9.5 1242 38500", "\"Audi A3\" 8.8 1160 38700", file = car, sep = "\n")
> close(car)

更常用的寫文件方式是把一個矩陣或者數據框以矩形塊的形式整體寫入文件,用write.table()函數

write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ", eol = "\n", na = "NA", dec = ".", row.names = TRUE,
            col.names = TRUE, qmethod = c("escape", "double"), fileEncoding = "")

數據預處理

常用的數學函數

sum(x) 對x中的元素求加和,

prod(x)對x中的元素求乘積,

max(x)/min(x)求x中元素的最大值和最小值,

range(x)返回取值范圍,相當於[min(x),max(x)],

length(x)返回x中元素的個數,

median(x)返回x中元素的中位數,

var(x)求x中元素的方差,

sd(x)求x中元素的標準差,

cov(x,y)求x和y的協方差,

cor(x,y)求x和y的相關系數,

round(x,n)對x中的元素四舍五入,保留小數點後的第n位,

sort(x)/order(x)排序,默認升序,

rev(x)對x中的元素取逆序,

unique(x)對x中重復的元素隻取一個,

table(x)統計x中完全相同的數據個數。

修改數據標簽

names()函數可以獲取數據集的列標簽,dimnames()[[1]]表示對行標簽進行操作如:dimnames()[[1]][1:3] = c(“1″,”2″,”3”)將數據的取1-3行的標簽改為1-3,dimnames()[[2]]表示列。

缺失值的處理

> air_data = airquality[1:7,1:4]
> is.na(air_data)
  Ozone Solar.R  Wind  Temp
1 FALSE   FALSE FALSE FALSE
2 FALSE   FALSE FALSE FALSE
3 FALSE   FALSE FALSE FALSE
4 FALSE   FALSE FALSE FALSE
5  TRUE    TRUE FALSE FALSE
6 FALSE    TRUE FALSE FALSE
7 FALSE   FALSE FALSE FALSE
> sum(is.na(air_data))
[1] 3
> complete.cases(air_data)
[1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE
> complete.cases(air_data$Ozone)
[1]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
is.na用來分析數據中是否含有缺失值,complete.cases則是判斷每一行是否有缺失值,當數據量變大時,利用aggr()函數進行判斷。
> air_data = airquality[1:31,1:4]
> aggr(air_data, las = 1, numbers = T)

圖中的的小長條的長度表示各個變量的缺失數據的比例,可見wind和temp變量數據是完整的。

刪除缺失樣本

> data = air_data[complete.cases(air_data),]
> dim(data)
[1] 24  4
> data = na.omit(air_data)
> dim(data)
[1] 24  4

替換掉缺失值

用均值或者中位數去代替缺失值是通常的處理策略。

> air_data$Ozone[is.na(air_data$Ozone)] = median(air_data$Ozone[!is.na(air_data$Ozone)])

補充:R語言學習筆記–數據框輸出和查看

(1)將數據框C輸出為.csv文件

write.table(C,file="ABC.csv",sep = ",",row.names=FALSE)  

#ABC.csv將保存在R的工作目錄下,當不加sep = ” “時,輸出的數據會在同一個單元格裡,因此要加“,”。

(2)查看數據框C的行數和列數

行數:length(C[1, ])

列數:length(C[ ,1])

行數+列數:dim(C)

(3)查看數據框C的變量名即列名

colnames(C)

(4)查看數據框C的變量x1中不同值的個數

length(unique(C$x1))

(5)在console裡的不同的輸出方式

print()

cat ( )

換行的話加“\n”

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。