激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - R語言 - R語言的Dataframe常用操作使用

R語言的Dataframe常用操作使用

2022-01-17 15:53ZhiboZhao R語言

本文將結合實例代碼,介紹R語言的Dataframe常用操作使用,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧

上節我們簡單介紹了Dataframe的定義,這節我們具體來看一下Dataframe的操作

首先,數據框的創建函數為 data.frame( ),參考R語言的幫助文檔,我們來了解一下data.frame( )的具體用法:

?
1
2
3
4
5
6
7
8
Usage
data.frame(..., row.names = NULL, check.rows = FALSE,
           check.names = TRUE, fix.empty.names = TRUE,
           stringsAsFactors = default.stringsAsFactors())
default.stringsAsFactors()
Arguments
... :these arguments are of either the form value or tag = value. Component names are created based on the tag (if present) or the deparsed argument itself.
row.names :NULL or a single integer or character string specifying a column to be used as row names, or a character or integer vector giving the row names for the data frame.

當然,后面還有很多參數的具體用法,在此不做一一贅述,主要用到的就是前兩個。首先,“...”代表了表格數據,就是要構成數據框的數據主體,row.names( )為要構成數據框的行名,那么既然數據框相當于R語言的一個表格,應該既有行名也有列名才對,那么列名又是如何給出的呢?我們知道,很多的數據處理軟件以及算法是以數據的列為單位進行的,之前我們構建矩陣的時候,默認也是按列填充(byrow=FALSE),而列名在創建數據框開始我們就已經確定好了的。詳見下面代碼:

我想要創建一個名為“mydataframe”的數據框,首先確定數據框里面的列有哪些,然后調用函數data.frame( )函數

?
1
2
3
4
5
6
7
8
9
10
11
12
> C1 <-c(1,2,3,4)
> C2 <-c(5,6,7,8)
> C3 <-c(9,10,11,12)
> C4 <-c(13,14,15,16)
> C5 <-c(17,18,19,20)
> mydataframe <- data.frame(C1,C2,C3,C4,C5,row.names = c("R1","R2","R3","R4"))
> mydataframe
   C1 C2 C3 C4 C5
R1  1  5  9 13 17
R2  2  6 10 14 18
R3  3  7 11 15 19
R4  4  8 12 16 20

由此可見,數據框是把現有的列拼接成一個表格的一種數據結構,細心的朋友會發現,這個數據框怎么跟上節我們講過的矩陣長得那么一樣!!!再回顧一下上節的矩陣創建:

?
1
2
3
4
5
6
7
8
9
10
> mydata <- c(1:20)
> cnames <- c("C1","C2","C3","C4","C5")
> rnames <- c("R1","R2","R3","R4")
> myarray <- matrix(mydata,nrow = 4,ncol = 5,dimnames = list(rnames,cnames))
> myarray
   C1 C2 C3 C4 C5
R1  1  5  9 13 17
R2  2  6 10 14 18
R3  3  7 11 15 19
R4  4  8 12 16 20

確實,從長相上來說分不出差別,但是矩陣里面的元素必須一致,而數據框可以是各種類型數據的集合。這種集合不是無條件亂七八糟的集合,而是以列為單位,不同列的元素類型可以不同,但是同一列的元素類型必須一致。因此,矩陣可以看做特殊的數據框類型那么這么做有什么意義呢?在數據統計中,我們需要有各種各樣類型的數據,就拿簡單的成績單來說,就包含了“姓名”,“學號”,“科目”等字符型元素,也包括“分數”等數值型元素,還有“是否通過”等布爾型元素,因此,從廣泛意義上來說,dataframe更具有普適性,矩陣多用在數學計算中。說歸說,我們來實際創建一個數據框,然后再演示一下它的具體操作:

?
1
2
3
4
5
6
7
8
9
10
> names <- c("小明","小紅","小蘭")
> StudentID <- c("2014","2015","2016")
> subjects <- c("英語","英語","英語")
> scores <- c(87,98,93)
> Result <- data.frame(StudentID,names,subjects,scores)
> Result
  StudentID names subjects scores
1      2014  小明     英語     87
2      2015  小紅     英語     98
3      2016  小蘭     英語     93

由上可見,當沒有給數據框指定行名的時候,系統會默認從1開始給每行一個行號,這跟Excel表格有點類似。 還是同往常一樣,我們先學習dataframe數據類型的基本操作

數據框元素的訪問:既然矩陣是特殊的數據框,那么矩陣元素的訪問方式應該也同樣適用于dataframe嗎?不是這樣,我們知道,數據框是以行或者列為單位(行列可以轉置),因此訪問元素時只能整行或者整列訪問。即dataframe[1,](訪問第一行),dataframe[,1](訪問第一列)采用這種方式訪問列時,返回值是按行排列的形式。訪問列同樣也可以直接使用dataframe(1)訪問第一列,或者dataframe(列名)來訪問指定的列。也可以連續訪問若干列,詳見代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
> Result[1,] #訪問第一行
  StudentID names subjects scores
1      2014  小明     英語     87
> Result[,1] #訪問第一列
[1] 2014 2015 2016
Levels: 2014 2015 2016
> Result[1] #訪問第一列
  StudentID
1      2014
2      2015
3      2016
> Result["names"] #訪問指定標號的列
  names
1  小明
2  小紅
3  小蘭
 
> Result[1:3,]  #訪問1-3行
  StudentID names subjects scores
1      2014  小明     英語     87
2      2015  小紅     英語     98
3      2016  小蘭     英語     93
> Result[1:3]  #訪問1-3列
  StudentID names subjects
1      2014  小明     英語
2      2015  小紅     英語
3      2016  小蘭     英語
> Result[c(1,3),]  #只訪問1,3行,注意寫法 c( )
  StudentID names subjects scores
1      2014  小明     英語     87
3      2016  小蘭     英語     93
> Result[c(1,4)]  #只訪問1,4列,注意寫法 c( )
  StudentID scores
1      2014     87
2      2015     98
3      2016     93
> Result[c("names","scores")]  #只訪問names和scores列,注意寫法 c( )
  names scores
1  小明     87
2  小紅     98
3  小蘭     93

 由上可得:對數據框操作,必須以向量為單位,使用c( ) or list( ),通過上述了解,我們發現,普通的訪問必須帶著行名和列名,這有的時候給我們帶來不必要的麻煩,比如我要計算成績平均值,帶上列名Score會給我們帶來一些困惑,于是有哪些方法可以在訪問數據庫元素時不帶著行名或者列名呢?

方法一:用attach和detach函數,比如要打印所有names,那么可以寫成:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
> attach(Result)
The following objects are masked _by_ .GlobalEnv:
    names, scores, StudentID, subjects
The following objects are masked from Result (pos = 3):
    names, scores, StudentID, subjects
> name <- names
> score <-scores
> detach(Result)
> name
[1] "小明" "小紅" "小蘭"
> score
[1] 87 98 93
> mean(score)
[1] 92.66667

方法二:用with函數

?
1
2
3
> with(Result,{score <- scores})
> score
[1] 87 98 93

上面談到了dataframe的創建和讀取,如果我需要添加或者刪除某一列該怎么辦呢?

?
1
2
3
4
5
6
7
8
9
10
11
12
> Result$age<-c(12,14,13)  #添加age列
> Result
  StudentID names subjects scores age
1      2014  小明     英語     87  12
2      2015  小紅     英語     98  14
3      2016  小蘭     英語     93  13
> Result2 <- Result[-2]  #刪除name列
> Result2
  StudentID subjects scores age
1      2014     英語     87  12
2      2015     英語     98  14
3      2016     英語     93  13

 如果我需要查詢成績等于98的學生的信息該怎么辦呢?

?
1
2
3
> Result[which(Result$scores==98),]
  StudentID names subjects scores age
2      2015  小紅     英語     98  14

上面說過了,矩陣和數據框也是兩種不同的數據類型,我們知道數據類型之間可以互相轉換,用is.***( )可以判斷某個變量是否為***類型,用as.***( )則將某個變量轉換為***類型。那么相應的,矩陣轉換為數據框類型則應為:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
> myarray
   C1 C2 C3 C4 C5
R1  1  5  9 13 17
R2  2  6 10 14 18
R3  3  7 11 15 19
R4  4  8 12 16 20
> myarrayframe <- as.data.frame(myarray)
> myarrayframe
   C1 C2 C3 C4 C5
R1  1  5  9 13 17
R2  2  6 10 14 18
R3  3  7 11 15 19
R4  4  8 12 16 20
> is.data.frame(myarray)
[1] FALSE
> is.data.frame(myarrayframe)
[1] TRUE

跟矩陣matrix操作一樣,數據框也有rbind和cbind函數,用法大致相同,有興趣的朋友可以簡單聯系一下,這里不再贅述。

最后,我們來談一下數據框數據處理操作:

上面我們講到,利用dataframe[ 列號 ]或者dataframe[ 列值 ]可以讀取數據框的某一列,返回值仍為數據框類型,但是這部分數據不方便直接利用我們之前講過的求和,求平均值等方法進行計算分析,因為讀取的數據帶有“行名/列名”,這個為字符型變量。有的人會問,我在創建數據框的時候,不加行名和列名不就行了?第一,在創建數據框的時候,會默認給你分配行名或者列名,第二,就算不分配行名或者列名,那數據框創建起來還有什么意義?

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
> mydataframe
   C1 C2 C3 C4 C5
R1  1  5  9 13 17
R2  2  6 10 14 18
R3  3  7 11 15 19
R4  4  8 12 16 20
> mydataframe["C4"]
   C4
R1 13
R2 14
R3 15
R4 16
> mean(mydataframe["C4"])
[1] NA
Warning message:
In mean.default(mydataframe["C4"]) : 參數不是數值也不是邏輯值:回覆NA
> is.data.frame(mydataframe["C4"])
[1] TRUE

方法一:將數據框格式重新轉化為矩陣格式,然后按照矩陣索引的方式來找尋要處理的數據組,利用矩陣或者向量中相關函數來進行一定的數據處理。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
> myarray2 <- as.matrix(mydataframe)
> is.matrix(myarray2)
[1] TRUE
> myarray2
   C1 C2 C3 C4 C5
R1  1  5  9 13 17
R2  2  6 10 14 18
R3  3  7 11 15 19
R4  4  8 12 16 20
> x <- myarray[,3] #讀取第3列的值
> x
R1 R2 R3 R4
 9 10 11 12
> is.vector(x) #查看x是否為向量類型
[1] TRUE
> mean(x)
[1] 10.5
> sum(x)
[1] 42

方法二:在讀取數據框列的時候換用另外一種方法,dataframe$(行名或者列名),返回值是vector類型

?
1
2
3
4
5
6
7
8
9
> c <- mydataframe$C3
> c
[1]  9 10 11 12
> is.vector(c)
[1] TRUE
> mean(c)
[1] 10.5
> sum(c)
[1] 42

同時,也可以利用dataframe$(新的列名) <- 新的向量,來給dataframe添加新的列,具體操作如下:

?
1
2
3
4
5
6
7
8
> mydataframe$sum <- mydataframe$C1 +mydataframe$C4
> mydataframe$mean <- (mydataframe$C1+mydataframe$C4)/2
> mydataframe
   C1 C2 C3 C4 C5 sum mean
R1  1  5  9 13 17  14    7
R2  2  6 10 14 18  16    8
R3  3  7 11 15 19  18    9
R4  4  8 12 16 20  20   10

最推崇的是下一種方法,直接利用transform函數組建新的數據框,具體用法如下:

?
1
2
3
4
5
6
7
8
9
> x1 <- mydataframe$C1
> x2 <- mydataframe$C3
> mydataframe2 <- transform(mydataframe,sum2=x1+x2,mean2=(x1+x2)/2)
> mydataframe2
   C1 C2 C3 C4 C5 sum mean sum2 mean2
R1  1  5  9 13 17  14    7   10     5
R2  2  6 10 14 18  16    8   12     6
R3  3  7 11 15 19  18    9   14     7
R4  4  8 12 16 20  20   10   16     8

到此這篇關于R語言的Dataframe常用操作使用的文章就介紹到這了,更多相關R語言 Dataframe常用操作內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/zhaozhibo/p/10341283.html

延伸 · 閱讀

精彩推薦
  • R語言R語言gsub替換字符工具的具體使用

    R語言gsub替換字符工具的具體使用

    這篇文章主要介紹了R語言gsub替換字符工具的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    lztttao10372021-12-24
  • R語言R語言實現支持向量機SVM應用案例

    R語言實現支持向量機SVM應用案例

    本文主要介紹了R語言實現支持向量機SVM應用案例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    一天_pika5222022-01-18
  • R語言R語言中qplot()函數的用法說明

    R語言中qplot()函數的用法說明

    這篇文章主要介紹了R語言中qplot()函數的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    Jack_丁明12752022-01-05
  • R語言R語言讀取xls與xlsx格式文件過程

    R語言讀取xls與xlsx格式文件過程

    這篇文章主要為大家介紹了使用R語言讀取xls與xlsx格式文件的過程步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪...

    Kanny廣小隸11982022-01-20
  • R語言R語言中的vector(向量),array(數組)使用總結

    R語言中的vector(向量),array(數組)使用總結

    這篇文章主要介紹了R語言中的vector(向量),array(數組)使用總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要...

    A葉子葉來5772021-11-14
  • R語言基于R/RStudio中安裝包“無法與服務器建立連接”的解決方案

    基于R/RStudio中安裝包“無法與服務器建立連接”的解決方案

    這篇文章主要介紹了基于R/RStudio中安裝包“無法與服務器建立連接”的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    truffle52815052022-01-05
  • R語言R語言常量知識點總結

    R語言常量知識點總結

    在本篇文章里小編給大家整理了一篇關于R語言常量知識點總結內容,有興趣的朋友們可以學習分享下。...

    R語言教程網12102021-12-29
  • R語言如何用R語言繪制散點圖

    如何用R語言繪制散點圖

    這篇文章主要介紹了如何用R語言繪制散點圖,幫助大家更好的理解和學習使用R語言,感興趣的朋友可以了解下...

    菜鳥教程13002021-12-23
主站蜘蛛池模板: 国产亚洲精品久久久久5区 综合激情网 | 国外成人在线视频 | 国产美女三级做爰 | 欧美黄色一级片在线观看 | av在线播放亚洲 | 亚洲欧美日韩久久精品第一区 | 国产一区二区午夜 | 天天色图片 | 羞羞视频免费网站男男 | 中文在线日韩 | 国产一区二区国产 | 老司机一级毛片 | 视频一区国产精品 | 日本一级黄色毛片 | 精品一区二区电影 | 欧洲黄视频| 毛片免费在线观看视频 | 国产成人在线视频播放 | 国产精品自在线拍 | 欧美精品成人 | 毛片免费在线视频 | 国产成人自拍av | 日韩视频一二三 | 国产精品一区二区三区在线播放 | 欧美成人a | 中文字幕在线播放第一页 | 国产精品影视 | 欧美精品一级 | 1级黄色毛片 | 欧美www | 免费播放欧美毛片 | 国产免费一区二区三区网站免费 | 国产日本在线播放 | 久久91精品国产91久久yfo | 成人免费在线视频 | 亚洲一区在线国产 | 中文字幕在线亚洲精品 | 一级做a爱片久久 | 中文字幕精品一区久久久久 | 日日草日日干 | 国产精品色在线网站 |