99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀R語(yǔ)言的小個(gè)性
R語(yǔ)言的小個(gè)性
2017-07-02
收藏

R語(yǔ)言的小個(gè)性

這篇文章用來(lái)記錄我在學(xué)習(xí)使用R語(yǔ)言中遇到的一些區(qū)別于其他程序語(yǔ)言的小問(wèn)題,以及一些解決方案。會(huì)持續(xù)記錄下去。

1.       除法

R語(yǔ)言的除法運(yùn)算符與其他常見(jiàn)語(yǔ)言一致:/

> 8/5

[1] 1.6

但是取余運(yùn)算符為:%%

> 8%%5

[1] 3

除法運(yùn)算取整除數(shù):%/%

> 8%/%5

[1] 1

除法四舍五入:round()

round()后面再帶一個(gè)參數(shù)表明保留到第幾位(為正數(shù)時(shí)是指保留幾位小數(shù),為負(fù)數(shù)時(shí)是指四舍五入到第幾位)

> round(8/5)

[1] 2

> round(3.141592653,2)

[1] 3.14

> round(3.141592653*100000,-2)

[1] 314200

2.       list和data.frame的區(qū)別

list和data.frame是R中處理表格數(shù)據(jù)常見(jiàn)的兩種格式,另外還有matrix。

先說(shuō)matrix,它必須保證所有的數(shù)據(jù)都是同一類型的。

> b <-matrix(c(1,1,1, 2,2,3, 1,3,4, 2,1,4), ncol=3, byrow=T)

> b

[,1][,2] [,3]

[1,]   1    1    1

[2,]   2    2    3

[3,]   1    3    4

[4,]   2    1    4

> a <- matrix(c(1,1,"wo",2,2,3, 1,3,4, 2,1,4), ncol=3, byrow=T)

> a

[,1][,2] [,3]

[1,] "1"  "1" "wo"

[2,] "2"  "2" "3"

[3,] "1"  "3" "4"

[4,] "2"  "1" "4"

> mode(a)

[1] "character"

> mode(b)

[1] "numeric"

可以看到a跟b的差異就是a中有個(gè)字符類型的數(shù)據(jù)“wo”,但是打印出來(lái)后,其他數(shù)值類型數(shù)據(jù)也被轉(zhuǎn)換為了字符類型。

現(xiàn)在來(lái)看list和data.frame的差異,它們都可以包含不同類型的數(shù)據(jù)但是也有些差異。

差異1:部分?jǐn)?shù)據(jù)查看及展示方式不同。list按列展示數(shù)據(jù),data.frame按行展示。

> list <-list(a=c("hai","tian","xiang","jie","de"),b=c("di","fang","jiu","shi","wo"),c=c("qian"

,"gua","de","gu","xiang"))

> list

$a

[1] "hai"   "tian"  "xiang" "jie"   "de"  

$b

[1] "di"   "fang" "jiu"  "shi"  "wo" 

$c

[1] "qian"  "gua"   "de"    "gu"    "xiang"

> dataframe

a    b     c

1  hai   di  qian

2  tianfang   gua

3 xiang jiu    de

4  jie  shi    gu

5    de   wo xiang

> head(list,n=1)

$a

[1] "hai"   "tian"  "xiang" "jie"   "de"  

> head(dataframe,n=1)

a  b    c

1 hai di qian

差異2:查看列名,對(duì)于list來(lái)說(shuō)應(yīng)該是查看行名(我的說(shuō)法)是用names(),對(duì)于dataframe來(lái)說(shuō)則是查看列名用colnames(),它還有查看行名rownames(),沒(méi)有定義時(shí),默認(rèn)為1,2,3,4……序列。

> names(list)

[1] "a" "b" "c"

> colnames(dataframe)

[1] "a" "b" "c"

> rownames(dataframe)

[1] "1" "2" "3""4" "5"


差異3:list可包含不同長(zhǎng)度數(shù)據(jù),dataframe必須每列包含相同長(zhǎng)度數(shù)據(jù),在list每行數(shù)據(jù)長(zhǎng)度相同時(shí),就可以使用as.data.frame()方法轉(zhuǎn)換為data.frame類型。

> list2 <-list(a=1:5,b=1:4)

> list2

$a

[1] 1 2 3 4 5

$b

[1] 1 2 3 4

> dataframe2<- as.data.frame(list2)

Error in data.frame(a = 1:5, b =1:4, check.names = TRUE, stringsAsFactors = TRUE) :

參數(shù)值意味著不同的行數(shù): 5, 4

> list2 <-list(a=1:5,b=6:10)

> list2

$a

[1] 1 2 3 4 5


$b

[1] 6  7  8  9 10

> dataframe2<- as.data.frame(list2)

> dataframe2

a  b

1 1  6

2 2  7

3 3  8

4 4  9

5 5 10


差異4:數(shù)據(jù)引用方式不同。都可以用$引用符號(hào),但是[]引用和[[]]引用方式上有差異。

> list$a

[1] "hai"   "tian"  "xiang" "jie"   "de"  

> dataframe$a

[1] hai  tian  xiang jie   de  

Levels: de hai jie tian xiang

> list[1]

$a

[1] "hai"   "tian"  "xiang" "jie"   "de"  

> dataframe[1]

a

1   hai

2  tian

3 xiang

4   jie

5    de

> list[[1]]

[1] "hai"   "tian"  "xiang" "jie"   "de"  

> dataframe[[1]]

[1] hai  tian  xiang jie   de   

Levels: de hai jie tian xiang

> list[[2]][1]

[1] "di"

> dataframe[[2]][1]

[1] di

Levels: di fang jiu shi wo

> list[2,1]

Error in list[2, 1] : incorrectnumber of dimensions

> dataframe[2,1]

[1] tian

Levels: de hai jie tian xiang


差異5:data.frame有一個(gè)factor因子,在差異四中,查看dataframe的某一列或者某一項(xiàng)數(shù)據(jù)時(shí),數(shù)據(jù)下面會(huì)有Levels的內(nèi)容,這個(gè)就是這一列的因子。相當(dāng)于這一列的取值范圍,有哪些唯一值。后面會(huì)講到factor因子的來(lái)歷以及作用,這里就不細(xì)說(shuō)了。


3.       刪除某一行或者某一列的數(shù)據(jù)。

對(duì)list和dataframe都適用。刪除行可以直接引用這一行并賦值為NULL,或者用-操作符號(hào),具體實(shí)現(xiàn)過(guò)程如下示。

> list$a <-NULL

> list

$b

[1] "di"   "fang" "jiu"  "shi"  "wo" 

$c

[1] "qian"  "gua"   "de"    "gu"    "xiang"

> list[-1]

$b

[1] "di"   "fang" "jiu"  "shi"  "wo" 

$c

[1] "qian"  "gua"   "de"    "gu"    "xiang"

> list$a

[1] "hai"   "tian"  "xiang" "jie"   "de"  

> list$a[-1]

[1] "tian"  "xiang" "jie"   "de"

> list[-1,]

Error in list[-1, ] : incorrectnumber of dimensions

> list[,-1]

Error in list[, -1] : incorrectnumber of dimensions


> dataframe$a<- NULL

> dataframe

b     c

1  di  qian

2 fang  gua

3 jiu    de

4  shi    gu

5   woxiang

> dataframe<- as.data.frame(list)

> dataframe[-1,]

a    b     c

2  tianfang   gua

3 xiang jiu    de

4  jie  shi    gu

5   de   wo xiang

> dataframe <- as.data.frame(list)

> dataframe[,-1]

b     c

1  di  qian

2 fang  gua

3 jiu    de

4 shi    gu

5   woxiang

> dataframe$b

[1] di  fang jiu  shi  wo 

Levels: di fang jiu shi wo

> dataframe$b[-2]

[1] di jiu shi wo

Levels: di fang jiu shi wo

Matrix也可用類似的操作來(lái)刪除某行某列的數(shù)據(jù),還可以一次刪除多個(gè)行多列或者多個(gè)值。

> dataframe$c

[1] qian gua   de    gu   xiang

Levels: de gu gua qian xiang

> dataframe$c[c(-1,-3,-5)]

[1] gua gu

Levels: de gu gua qian xiang


4.      讀取數(shù)據(jù)。

主要是為了講read.table()和read.csv()方法的一些小細(xì)節(jié)。數(shù)據(jù)讀入后都被存為data.frame的類型。

編碼:read.csv()默認(rèn)讀取中文的格式是gbk格式的,無(wú)法設(shè)置。如果你的讀入文件中文編碼格式是UTF-8格式,使用read.csv就會(huì)出現(xiàn)亂碼。但是read.table()方法默認(rèn)讀取UTF-8格式中文,并且包含encoding參數(shù),可以設(shè)置讀取數(shù)據(jù)的編碼格式。

表頭:read.csv()默認(rèn)是含有表頭的也就是header=T,read.table()默認(rèn)沒(méi)有表頭header=F。

因子:read.csv()和read.table()兩個(gè)方法都有stringsAsFactors參數(shù),默認(rèn)為TRUE。如果你不設(shè)置的話,數(shù)據(jù)讀入時(shí),每一列字符型的數(shù)據(jù)都按因子方式存儲(chǔ)。如下面例子,fruit列被轉(zhuǎn)換成了因子,數(shù)據(jù)被轉(zhuǎn)換成了1,1,3,4,2,這幾個(gè)數(shù)值1-4按順序分別對(duì)應(yīng)著Levels:蘋果葡萄 香蕉 柚子。但是我們查看這一列數(shù)據(jù)時(shí),顯示的還是字符型數(shù)據(jù)。

> test

fruitprice

1 蘋果 5.98

2 蘋果 3.50

3 香蕉 4.50

4 柚子 4.80

5 葡萄 8.70

> test$fruit

[1]蘋果蘋果香蕉柚子葡萄

Levels:蘋果葡萄香蕉柚子

從clipboard上讀入數(shù)據(jù):見(jiàn)上一個(gè)列子中,我們能直接從clipboard上讀取數(shù)據(jù),先在Excel上選中需要讀入的數(shù)據(jù)區(qū)域,右鍵復(fù)制,再執(zhí)行read.table("clipboard")語(yǔ)句即可。

> test <-read.table("clipboard",header=T)

> test

fruitprice

1 蘋果 5.98

2 蘋果 3.50

3 香蕉 4.50

4 柚子 4.80

5 葡萄 8.70


5.       兩表合并的方法

這里是兩個(gè)表類似MySQL中join的方法——merge(),默認(rèn)根據(jù)兩個(gè)表相同列名相交。方法的介紹見(jiàn)鏈接:http://my.oschina.net/u/1791586/blog/337054,里面有很詳細(xì)的方法說(shuō)明。想說(shuō)明的是參數(shù)all/x.all/y.all,這三個(gè)參數(shù)取值T/F,用來(lái)定義是否取兩個(gè)數(shù)據(jù)框x或者y的所有列。效果分別類似join的全連接,左連接,右連接。就不另外舉例子了,參考鏈接里有很好的例子。


6.       查看數(shù)據(jù)。

View()可以查看list、vector、dataframe數(shù)據(jù),但是在Rstudio中,用View()查看時(shí)會(huì)有中文亂碼。不過(guò)mac和Linux平臺(tái)上不存在這個(gè)問(wèn)題,只用Windows平臺(tái)上才有,好像沒(méi)看到有什么設(shè)置Rstudio的方式可以避免這個(gè)的中文亂碼。R中不存在亂碼的問(wèn)題。

fix()也可以查看list、vector、dataframe數(shù)據(jù)。

區(qū)別在于fix()方法可以查看列所包含的字段數(shù)不同的list的內(nèi)容。View()只能查看整齊的數(shù)據(jù),就是行列數(shù)都相同時(shí)的數(shù)據(jù)。另外fix()方法是查看數(shù)據(jù),打開(kāi)數(shù)據(jù)編輯框,并能夠在其中修改數(shù)據(jù)。View()方法只是單純的查看數(shù)據(jù)。

> test <-list(a=c("a","b","c","d"),b=1:4)

> View(test)

> fix(test)

> fix(dataframe)

7.       R語(yǔ)言數(shù)據(jù)類型查看mode()/class()/typeof()

沒(méi)有找到一個(gè)很細(xì)致的說(shuō)明,只能根據(jù)我自己的大概理解來(lái)看,可能會(huì)有誤,歡迎指正。這三個(gè)函數(shù)都是能夠查看數(shù)據(jù)類型的函數(shù)。但是有些小細(xì)節(jié)的差異。

R語(yǔ)言中,所有的數(shù)據(jù)、對(duì)象、方法、語(yǔ)句都可以查看mode(),主要的mode類型有:complex、raw、character、list、expression、name、symbol、function,mode可以說(shuō)是大的類型。

所有對(duì)象都有typeof屬性和class屬性,但是相比class而言,typeof更細(xì)致。

>x <- c(1,2,3,4,5)

>mode(x)

[1]"numeric"

> class(x)

[1]"numeric"

> typeof(x)

[1] "double"


數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }