日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

r语言各形状编号_R语言入门第八讲:编码分类变量(factor)

發(fā)布時間:2025/3/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 r语言各形状编号_R语言入门第八讲:编码分类变量(factor) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天第八篇~~~~~~

在第一講中我給大家介紹了read.table函數(shù)的使用。最近我在處理一個一百萬左右的數(shù)據(jù),發(fā)現(xiàn)read.table函數(shù)出了問題。我不知道是在excel轉(zhuǎn)成txt時出的問題還是因為R在讀取數(shù)據(jù)時出了問題------應(yīng)該不是操作的問題,可能因為數(shù)據(jù)過于龐大(至少在參考書中目前應(yīng)該沒有一百萬的例子介紹),在轉(zhuǎn)換的過程中我讀不出來數(shù)據(jù)。它會提示我某某行數(shù)據(jù)不全。即使是我用了參數(shù)fill=T,也不管用,因為它會提示我行名稱重復(fù)。我并不知道為什么會這樣------我確信我的數(shù)據(jù)在excel表中是完整的,可是就是讀不出來。(當然還有一種可能就是我的計算機不夠高級,所以在轉(zhuǎn)換的時候出錯了------因為在運行的時候還是會卡,退出R都會等半天------師兄們說是我的電腦不行了)另外一個數(shù)據(jù)大概18萬個樣本量,也出現(xiàn)類似錯誤,或者少讀取那么一兩行,或者讀取的非常混亂。于是我在想,實踐就是和理論一樣啊!還是要多實踐才能進步。

好了,前面做了這么多鋪墊,目的就是想告訴大家read.table在讀取excel表格轉(zhuǎn)化的制表分隔符文件時出錯了。介紹一個更好用而且至少目前我成功讀出數(shù)據(jù)的函數(shù)read.csv。

它的使用和read.table一模一樣,參數(shù)也一模一樣。不同的一點就是參數(shù)的默認值。read.table中你需要設(shè)置header=T來確定變量名,設(shè)置fill=T來使行有空缺的數(shù)據(jù)讀入R中,但是在read.csv中,自動設(shè)置了這些項目,以及sep=”,”,因為excel本來就是逗號分隔。在讀取之前,你需要做的就是先把excel表格轉(zhuǎn)化為csv的格式:在另存為的文件類型中找到CSV(逗號分隔)(*.csv)這一選項保存就可以了。之后寫代碼就OK:

> setwd("E:/Rstore/")

> wq=read.csv("wq.csv")

> wq

A ?B ?C ?D

1 12 65 78 98

2 56 89 87 78

3 78 87 56 98

4 98 89 24 56

5 78 87 87 12

6 96 89 33 45

7 23 78 69 65

8 23 98 82 86

9 65 87 12 45

可以看到,什么都沒有設(shè)置,wq文件就被讀出來了,很方便。read.table的所有參數(shù)都可以在這里使用。

上一講我給大家介紹了參數(shù)stringsAsFactors。留了一個小小的疑問,就是什么是“factor”。在R中,它表示因子。說成因子可能大家不是很明白。實際上我自己也并不名明白。但是重要的仍然是運用。因子在R中起到的是分類變量的作用。這里稍微介紹幾個名詞。我們在統(tǒng)計分析中,通常都是選整體的一小部分觀察單位作為數(shù)據(jù)進行分析,而不是那個“整體”。這個整體我們稱為總體,而選擇的其中某些用來分析的這一小部分觀察單位稱作樣本。樣本包含的數(shù)量大小稱作樣本含量。 每個樣本的某個屬性特征是不相同的,這種不同被稱作變異,正因為有了變異的存在,所以我們將觀察單位的某種反映變異的特征稱為變量。舉個例子:某個省的全體男性是一個總體,那么我們選擇該省一部分男性做調(diào)查,這一部分男性就是樣本。選擇的這一部分男性的數(shù)量就是樣本含量。我們想了解這些男性的平均身高和體重,那么身高和體重就是變量,其測量值的大小稱為變量值。

變量的分類有很多種方法,這里面我只說其中的一種就足夠了:定量變量與定性變量。定量變量簡單說來就是可以用實數(shù)表示的變量,比如我們說的身高,體重,能夠確切的說出一個實數(shù)來代表它------如某個男性的身高為183cm,體重為70kg,是很明確的。定性變量又被稱作分類變量,即對該變量只能下一個定義,但是一般不能用確切的數(shù)值表示,比如性別(男,女),民族(回,漢),吸煙(是,否)。當然,我們在實際處理數(shù)據(jù)的時候會把它們變成某個數(shù)值(如1,2),但是這僅僅是為了適應(yīng)統(tǒng)計軟件,實際上它們還是分類變量。介于定量變量與定性變量之間的是等級變量(有序變量),所以也可以稱為半定量變量,比如高血壓,有1級,2級,3級,這些本質(zhì)上是分類變量,但是它們有先后順序(等級)差別,所以處理的時候就是另外的方法。

好了,下面我們介紹函數(shù)factor:

> ID=1:5

> sex=c(1,2,2,1,1)

> age=c(12,50,30,44,62)

> disease=c("malaria","hypertension","diabetes","hypertension","diabetes")

> degree=c("mild","severe","moderate","severe","moderate")

> patient=data.frame(ID,sex,age,disease,degree)

> patient

ID sex age ?????disease ??degree

1 ?1 ??1 ?12 ?????malaria ????mild

2 ?2 ??2 ?50 hypertension ??severe

3 ?3 ??2 ?30 ????diabetes moderate

4 ?4 ??1 ?44 hypertension ??severe

5 ?5 ??1 ?62 ????diabetes moderate

我隨意編寫了幾個數(shù)據(jù),第一行代碼生成了5位病人的ID,第二行是性別(1為男、2為女),第三行年齡,第四行為疾病(瘧疾、高血壓、糖尿病),第四行生成疾病的嚴重程度(輕度、重度、中等)。

在這里,年齡是一個定量變量,ID是編號,實際上并沒有什么分析意義。剩下的性別、疾病以及疾病的程度都屬于分類變量,在R中它們被稱作因子。雖然我們是以字符輸入的,但是默認的stringsAsFactors函數(shù)會幫我們進行轉(zhuǎn)化。要想了解該數(shù)據(jù)框的變量都是什么類型的,我們需要一個函數(shù)str():

> str(patient)

'data.frame': ??5 obs. of ?5 variables:

$ ID ????: int ?1 2 3 4 5

$ sex ???: num ?1 2 2 1 1

$ age ???: num ?12 50 30 44 62

$ disease: Factor w/ 3 levels "diabetes","hypertension",..: 3 2 1 2 1

$ degree : Factor w/ 3 levels "mild","moderate",..: 1 3 2 3 2

結(jié)果的第一行告訴我們該對象是一個數(shù)據(jù)框,有5個變量,其后用$連結(jié)的就是每一個變量的類型。結(jié)果的最后兩行disease和degree即被判定為因子,也就是分類變量,disease有三個水平,degree有三個水平。因子水平可以理解為分類變量的水平,或者說分類變量的類別。這里面性別給的是數(shù)值型變量,因為在錄入的時候我們指定1是“男”,2是“女”,這是為了在錄入數(shù)據(jù)時候方便而設(shè)置的。我們?nèi)绻雽⑺匦沦x值變?yōu)橐蜃?#xff0c;就需要使用factor函數(shù):

> patient$sex2=factor( patient$sex,levels=c(1,2),labels=c("M","F"))

> patient

ID sex age ?????disease ??degree sex2

1 ?1 ??1 ?12 ?????malaria ????mild ???M

2 ?2 ??2 ?50 hypertension ??severe ???F

3 ?3 ??2 ?30 ????diabetes moderate ???F

4 ?4 ??1 ?44 hypertension ??severe ???M

5 ?5 ??1 ?62 ????diabetes moderate ???M

這行代碼中,等號左邊是對數(shù)據(jù)框patient添加一新的子集“Sex2”,上一講已經(jīng)說明了,等號后面是factor的使用,即將一個向量變換為一個因子。我們將sex轉(zhuǎn)變?yōu)橐蜃?#xff0c;參數(shù)levels設(shè)定因子的水平,參數(shù)labels設(shè)定因子水平的標簽為“M”(male)和“F”(female)。

接下來我們再看看這個數(shù)據(jù)框的結(jié)構(gòu):

> str(patient)

'data.frame': ??5 obs. of ?6 variables:

$ ID ????: int ?1 2 3 4 5

$ sex ???: num ?1 2 2 1 1

$ age ???: num ?12 50 30 44 62

$ disease: Factor w/ 3 levels "diabetes","hypertension",..: 3 2 1 2 1

$ degree : Factor w/ 3 levels "mild","moderate",..: 1 3 2 3 2

$ sex2 ??: Factor w/ 2 levels "M","F": 1 2 2 1 1

結(jié)果的最后一行告訴我們因子sex2有兩個水平,分別是M和F。

分類變量有等級(順序)差別時,我們稱作等級變量(有序變量)。比如對疾病嚴重程度的分級:

> degree=c("mild","severe","moderate","severe","moderate")

> factor(degree)

[1] mild ????severe ??moderate severe ??moderate

Levels: mild moderate severe

這里顯示疾病程度有三個水平,輕度(mild)、中度(moderate)、和重度(severe),既然知道這是一個有等級差別的因子,我們在分析過程中肯定也要將它分等級,這時候我們會用到一個參數(shù)ordered=T,即排序:

> degree=c("mild","severe","moderate","severe","moderate")

> factor(degree,ordered=T)

[1] mild ????severe ??moderate severe ??moderate

Levels: mild < moderate < severe

結(jié)果中看到levels這一行有變化,R對嚴重程度進行排序并告訴我們輕度

> degree=c("slight","ailing","moderate","ailing","moderate")

> factor(degree,ordered=T)

[1] slight ??ailing ??moderate ailing ??moderate

Levels: ailing < moderate < slight

這種排序完全與我們的想法背離:重度(ailing)

> factor(degree,ordered=T,levels=c("slight","moderate","ailing"))

[1] slight ??ailing ??moderate ailing ??moderate

Levels: slight < moderate < ailing

這樣就和我們認為的相同了。

函數(shù)factor有一個默認參數(shù)exclude=NA,即排除含有NA的元素,意思就是缺失值NA不算作一個因子的水平。例如:

> degree=c("slight","ailing","moderate","ailing","moderate",NA)

> factor(degree)

[1] slight ??ailing ??moderate ailing ??moderate

Levels: ailing moderate slight

結(jié)果中NA沒有被算作一個水平。

> degree=c("slight","ailing","moderate","ailing","moderate",NA)

> factor(degree,exclude=NULL)

[1] slight ??ailing ??moderate ailing ??moderate

Levels: ailing moderate slight

令參數(shù)exclude等于空值(NULL)的話,則NA也被算作因子的一個水平。

當然,如果你想排除任意一個水平,只需把exclude的賦值更改即可:

> degree=c("slight","ailing","moderate","ailing","moderate")

> factor(degree,exclude="slight")

[1] ????ailing ??moderate ailing ??moderate

Levels: ailing moderate

這行代碼是將slight排除掉。原先的元素slight換成了缺失值,同時因子的水平也不存在slight。

str()函數(shù)可以窺探任何數(shù)據(jù)的結(jié)構(gòu),用法也很簡單。雖然里面還有很多參數(shù),但是應(yīng)該不妨礙我們直接對它的使用。我也在繼續(xù)研究該函數(shù),如果有結(jié)果會和大家分享。

factor()函數(shù)目前本人僅了解到該水平,并且我認為還是夠用的。

對于任何函數(shù),用法都是多樣的,如果有新的發(fā)現(xiàn)我會即時分享給大家。

最后,關(guān)于read.table函數(shù)在讀取大數(shù)據(jù)時候為什么會出現(xiàn)失誤,如果大家知道原因,或者有更好的辦法,可以和我討論。

本次就到這里~~~~

(圖片來源于網(wǎng)絡(luò))

總結(jié)

以上是生活随笔為你收集整理的r语言各形状编号_R语言入门第八讲:编码分类变量(factor)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲在线看片 | 国产成人中文字幕 | 日本免费一区二区视频 | 欧美性猛交 | 三级福利视频 | 黄色片一区二区三区 | 国产乱子伦精品 | 国产精品久久久久久免费 | 天天操人人 | 波多野结衣电影免费观看 | 亚洲第一页中文字幕 | 丰满少妇av | 久久免费影院 | 亚洲第一福利网站 | 深爱激情综合网 | 欧美乱妇日本无乱码特黄大片 | 久久精品视频在线 | 轻点好疼好大好爽视频 | 四虎影院在线视频 | 爱爱中文字幕 | 国产免费无码一区二区视频 | 自拍视频一区二区 | 日本十八禁视频无遮挡 | 久热免费在线视频 | 亚洲免费不卡视频 | av网站免费在线观看 | 三级网站在线免费观看 | 国产精品久久久久9999 | 天天天天射 | 人人爽人人爽人人片 | 久久久久久国产免费a片 | 亚洲免费天堂 | 欧美性xxxxx极品少妇 | 黄频视频在线观看 | 国产污污视频在线观看 | 中国女人一级一次看片 | 少妇精品久久久一区二区三区 | 无码精品黑人一区二区三区 | 成人黄色小视频在线观看 | 狠狠躁日日躁夜夜躁2022麻豆 | 全国最大色 | 爱草视频 | 亚洲黄色第一页 | 蜜臀精品| 性一交一黄一片 | 先锋影音av中文字幕 | 人妻妺妺窝人体色www聚色窝 | 国产日韩欧美高清 | 打屁股视频网站 | 欧美精品免费在线 | 成人动漫在线观看视频 | 男人深夜影院 | 国产一区二区三区 | 精品久久久久久无码人妻 | 国产精品天美传媒沈樵 | 午夜影院美女 | 国产在线观看免费视频软件 | 色爽黄| 日本女优黄色 | 国产性生活 | 成年黄色网 | 无码aⅴ精品一区二区三区 精品久久在线 | 艳妇臀荡乳欲伦交换在线播放 | 欧美一区三区三区高中清蜜桃 | 亚洲av片不卡无码久久 | 免费久草视频 | 少妇99| 欧美美女性视频 | 日韩免费视频 | 国产激情一区二区三区视频免樱桃 | 少妇视频在线 | 香蕉久久夜色精品升级完成 | 国产黑丝在线视频 | 日韩大片一区二区 | 欧美日韩xxx | 你懂的视频在线播放 | 国产亚洲欧美精品久久久久久 | 久久精品黄aa片一区二区三区 | 蜜臀av性久久久久蜜臀aⅴ麻豆 | 337p粉嫩大胆噜噜噜噜69影视 | 亚洲九九夜夜 | 中国女人特级毛片 | 最新日韩精品 | 少妇av在线播放 | 久草久草| 超碰在线影院 | 性欧美丰满熟妇xxxx性仙踪林 | 国产精品国产一区 | 射死你天天日 | 午夜影视剧场 | 欧美少妇在线 | 欧美久久成人 | 在线97 | 欧美一级片在线播放 | 噜噜吧噜噜色 | 久久在线免费观看 | 男人干女人视频 | 黄色特级片 | www.狠狠操|