R語言:基礎(chǔ)篇

一.R環(huán)境設(shè)置

嘗試在線環(huán)境

你真的不需要設(shè)置自己的環(huán)境來開始學(xué)習(xí)R編程語言。 原因很簡單,我們已經(jīng)在線設(shè)置了R編程環(huán)境衣迷,以便您可以在進行理論工作的同時在線編譯和執(zhí)行所有可用的示例。 這給你對你正在閱讀的信心,并用不同的選項檢查結(jié)果谤牡。 隨意修改任何示例并在線執(zhí)行。
實例:

# Print Hello World. 
print("Hello World") 
 
# Add two numbers. 
print(23.9 + 11.6)

Windows安裝

您可以從R-3.2.2 for Windows(32/64位)下載R的Windows安裝程序版本姥宝,并將其保存在本地目錄中翅萤。

因為它是一個名為“R-version-win.exe”的Windows安裝程序(.exe)。 您只需雙擊并運行安裝程序接受默認設(shè)置即可腊满。 如果您的Windows是32位版本套么,它將安裝32位版本。 但是如果你的窗口是64位糜烹,那么它安裝32位和64位版本违诗。

安裝后,您可以找到該圖標疮蹦,以在Windows程序文件下的目錄結(jié)構(gòu)“R \ R3.2.2 \ bin \ i386 \ Rgui.exe”中運行程序诸迟。 單擊此圖標會打開R-GUI,它是R控制臺來執(zhí)行R編程愕乎。

Linux安裝

R語言適用于多版本的Linux系統(tǒng)阵苇。

各版本Linux的各有不同。具體的安裝步驟在上述資源中有對應(yīng)的教程感论。但是绅项,如果你是在趕時間,那么你可以用yum命令比肄,如下所示的安裝指令
安裝R

$ yum install R

以上命令將安裝R編程的核心功能與標準包快耿,額外的包需要另外安裝,而后你可以按如下提示啟動R芳绩。

$ R

R version 3.2.0 (2015-04-16) -- "Full of  Ingredients"          
Copyright (C) 2015 The R Foundation for Statistical Computing
Platform: x86_64-redhat-linux-gnu (64-bit)
        
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
            
R is a collaborative project with many  contributors.                    
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

>  

現(xiàn)在掀亥,您可以在R語言提示符下使用install命令安裝所需的軟件包。 例如妥色,以下命令將安裝為3D圖表所需的plotrix軟件包搪花。

> install.packages("plotrix")

二.R語言 基本語法

命令提示符

如果你已經(jīng)配置好R語言環(huán)境,那么你只需要按一下的命令便可輕易開啟命令提示符

$ R

這將啟動R語言解釋器,你會得到一個提示 > 在那里你可以開始輸入你的程序撮竿,具體如下吮便。

> myString <- "Hello, World!"
> print ( myString)
[1] "Hello, World!"

在這里,第一個語句先定義一個字符串變量myString幢踏,并將“Hello髓需,World!”賦值其中惑折,第二句則使用print()語句將變量myString的內(nèi)容進行打印授账。

腳本文件

通常,您將通過在腳本文件中編寫程序來執(zhí)行編程惨驶,然后在命令提示符下使用R解釋器(稱為Rscript)來執(zhí)行這些腳本白热。 所以讓我們開始在一個命名為test.R的文本文件中編寫下面的代碼

# My first program in R Programming
myString <- "Hello, World!"

print ( myString)

將上述代碼保存在test.R文件中,并在Linux命令提示符下執(zhí)行粗卜,如下所示屋确。 即使您使用的是Windows或其他系統(tǒng),語法也將保持不變续扔。

$ Rscript test.R 

當(dāng)我們運行上面的程序攻臀,它產(chǎn)生以下結(jié)果。

[1] "Hello, World!"

注釋

注釋能幫助您解釋R語言程序中的腳本纱昧,它們在實際執(zhí)行程序時會被解釋器忽略刨啸。 單個注釋使用#在語句的開頭寫入,如下所示

# My first program in R Programming

R語言不支持多行注釋识脆,但你可以使用一個小技巧设联,如下

if(FALSE) {
   "This is a demo for multi-line comments and it should be put inside either a single
      OR double quote"
}

myString <- "Hello, World!"
print ( myString)

雖然上面的注釋將由R解釋器執(zhí)行,但它們不會干擾您的實際程序灼捂。 但是你必須為內(nèi)容加上單引號或雙引號离例。

三.數(shù)據(jù)結(jié)構(gòu)

通常,在使用任何編程語言進行編程時悉稠,您需要使用各種變量來存儲各種信息宫蛆。 變量只是保留值的存儲位置。 這意味著的猛,當(dāng)你創(chuàng)建一個變量耀盗,你必須在內(nèi)存中保留一些空間來存儲它們。

您可能想存儲各種數(shù)據(jù)類型的信息卦尊,如字符叛拷,寬字符,整數(shù)猫牡,浮點胡诗,雙浮點邓线,布爾等淌友』突郑基于變量的數(shù)據(jù)類型,操作系統(tǒng)分配內(nèi)存并決定什么可以存儲在保留內(nèi)存中震庭。

與其他編程語言(如C中的C和java)相反瑰抵,變量不會聲明為某種數(shù)據(jù)類型。 變量分配有R對象器联,R對象的數(shù)據(jù)類型變?yōu)樽兞康臄?shù)據(jù)類型二汛。盡管有很多類型的R對象,但經(jīng)常使用的是:

  • 矢量
  • 列表
  • 矩陣
  • 數(shù)組
  • 因子
  • 數(shù)據(jù)幀
    這些對象中最簡單的是向量對象拨拓,并且這些原子向量有六種數(shù)據(jù)類型肴颊,也稱為六類向量。 其他R對象建立在原子向量之上渣磷。
  • Logical(邏輯型):TRUE, FALSE
  • Numeric(數(shù)字) 12.3,5,999
  • Integer(整型) 2L漓柑,34L膳帕,0L
  • Complex(復(fù)合型) 3 + 2i
  • Character(字符) 'a' , '"good", "TRUE", '23.4'
  • Raw(原型) "Hello" 被存儲為 48 65 6c 6c 6f
    在R編程中,非承畏模基本的數(shù)據(jù)類型是稱為向量的R對象丘侠,其保存如上所示的不同類的元素。 請注意逐样,在R中蜗字,類的數(shù)量不僅限于上述六種類型。 例如官研,我們可以使用許多原子向量并創(chuàng)建一個數(shù)組秽澳,其類將成為數(shù)組。

Vectors 向量

當(dāng)你想用多個元素創(chuàng)建向量時戏羽,你應(yīng)該使用c()函數(shù)担神,這意味著將元素組合成一個向量。

# Create a vector.
apple <- c('red','green',"yellow")
print(apple)

# Get the class of the vector.
print(class(apple))

當(dāng)我們執(zhí)行上面的代碼始花,它產(chǎn)生以下結(jié)果

[1] "red"    "green"  "yellow"
[1] "character"

Lists 列表

列表是一個R對象妄讯,它可以在其中包含許多不同類型的元素,如向量酷宵,函數(shù)甚至其中的另一個列表亥贸。

# Create a list.
list1 <- list(c(2,5,3),21.3,sin)

# Print the list.
print(list1)

當(dāng)我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果

[[1]]
[1] 2 5 3

[[2]]
[1] 21.3

[[3]]
function (x)  .Primitive("sin")
### Matrices 矩陣

矩陣是二維矩形數(shù)據(jù)集浇垦。 它可以使用矩陣函數(shù)的向量輸入創(chuàng)建炕置。

# Create a matrix.
M = matrix( c('a','a','b','c','b','a'), nrow = 2, ncol = 3, byrow = TRUE)
print(M)

當(dāng)我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果

     [,1] [,2] [,3]
[1,] "a"  "a"  "b" 
[2,] "c"  "b"  "a"

Arrays 數(shù)組

雖然矩陣被限制為二維,但陣列可以具有任何數(shù)量的維度朴摊。 數(shù)組函數(shù)使用一個dim屬性創(chuàng)建所需的維數(shù)默垄。 在下面的例子中,我們創(chuàng)建了一個包含兩個元素的數(shù)組甚纲,每個元素為3x3個矩陣口锭。

# Create an array.
a <- array(c('green','yellow'),dim = c(3,3,2))
print(a)

當(dāng)我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果

, , 1

     [,1]     [,2]     [,3]    
[1,] "green"  "yellow" "green" 
[2,] "yellow" "green"  "yellow"
[3,] "green"  "yellow" "green" 

, , 2

     [,1]     [,2]     [,3]    
[1,] "yellow" "green"  "yellow"
[2,] "green"  "yellow" "green" 
[3,] "yellow" "green"  "yellow"  

Factors 因子

因子是使用向量創(chuàng)建的r對象介杆。 它將向量與向量中元素的不同值一起存儲為標簽鹃操。 標簽總是字符,不管它在輸入向量中是數(shù)字還是字符或布爾等春哨。 它們在統(tǒng)計建模中非常有用荆隘。
使用factor()函數(shù)創(chuàng)建因子。nlevels函數(shù)給出級別計數(shù)赴背。

# Create a vector.
apple_colors <- c('green','green','yellow','red','red','red','green')

# Create a factor object.
factor_apple <- factor(apple_colors)

# Print the factor.
print(factor_apple)
print(nlevels(factor_apple))

當(dāng)我們執(zhí)行上面的代碼臭胜,它產(chǎn)生以下結(jié)果

[1] green  green  yellow red    red    red    yellow green 
Levels: green red yellow
# applying the nlevels function we can know the number of distinct values
[1] 3

Data Frames 數(shù)據(jù)幀

數(shù)據(jù)幀是表格數(shù)據(jù)對象。 與數(shù)據(jù)幀中的矩陣不同癞尚,每列可以包含不同的數(shù)據(jù)模式耸三。 第一列可以是數(shù)字,而第二列可以是字符浇揩,第三列可以是邏輯的仪壮。 它是等長度的向量的列表。
使用data.frame()函數(shù)創(chuàng)建數(shù)據(jù)幀胳徽。

# Create the data frame.
BMI <-  data.frame(
   gender = c("Male", "Male","Female"), 
   height = c(152, 171.5, 165), 
   weight = c(81,93, 78),
   Age = c(42,38,26)
)
print(BMI)

當(dāng)我們執(zhí)行上面的代碼积锅,它產(chǎn)生以下結(jié)果

  gender height weight Age
1   Male  152.0     81  42
2   Male  171.5     93  38
3 Female  165.0     78  26  

四.變量

變量為我們提供了我們的程序可以操作的命名存儲。 R語言中的變量可以存儲原子向量养盗,原子向量組或許多Robject的組合缚陷。 有效的變量名稱由字母,數(shù)字和點或下劃線字符組成往核。 變量名以字母或不以數(shù)字后跟的點開頭箫爷。
注:有字母,數(shù)字聂儒,點和下劃線虎锚,其中只能字母開頭

變量賦值

可以使用向左,向右和等于運算符來為變量分配值衩婚。 可以使用print()或cat()函數(shù)打印變量的值窜护。 cat()函數(shù)將多個項目組合成連續(xù)打印輸出。

# Assignment using equal operator.
var.1 = c(0,1,2,3)           

# Assignment using leftward operator.
var.2 <- c("learn","R")   

# Assignment using rightward operator.   
c(TRUE,1) -> var.3           

print(var.1)
cat ("var.1 is ", var.1 ,"
")
cat ("var.2 is ", var.2 ,"
")
cat ("var.3 is ", var.3 ,"
")

當(dāng)我們執(zhí)行上面的代碼非春,它產(chǎn)生以下結(jié)果 -

[1] 0 1 2 3
var.1 is  0 1 2 3 
var.2 is  learn R 
var.3 is  1 1 

注 - 向量c(TRUE柱徙,1)具有邏輯和數(shù)值類的混合缓屠。 因此,邏輯類強制轉(zhuǎn)換為數(shù)字類护侮,使TRUE為1藏研。

變量的數(shù)據(jù)類型

在R語言中,變量本身沒有聲明任何數(shù)據(jù)類型概行,而是獲取分配給它的R - 對象的數(shù)據(jù)類型。 所以R稱為動態(tài)類型語言弧岳,這意味著我們可以在程序中使用同一個變量時凳忙,一次又一次地更改變量的數(shù)據(jù)類型。

var_x <- "Hello"
cat("The class of var_x is ",class(var_x),"
")

var_x <- 34.5
cat("  Now the class of var_x is ",class(var_x),"
")

var_x <- 27L
cat("   Next the class of var_x becomes ",class(var_x),"
")

當(dāng)我們執(zhí)行上面的代碼禽炬,它產(chǎn)生以下結(jié)果 -

The class of var_x is  character 
   Now the class of var_x is  numeric 
      Next the class of var_x becomes  integer

查找變量

要知道工作空間中當(dāng)前可用的所有變量涧卵,我們使用ls()函數(shù)。 ls()函數(shù)也可以使用模式來匹配變量名腹尖。

print(ls())

當(dāng)我們執(zhí)行上面的代碼柳恐,它產(chǎn)生以下結(jié)果 -

[1] "my var"     "my_new_var" "my_var"     "var.1"      
[5] "var.2"      "var.3"      "var.name"   "var_name2."
[9] "var_x"      "varname" 

注意 - 它是一個示例輸出,取決于在您的環(huán)境中聲明的變量热幔。
ls()函數(shù)可以使用模式來匹配變量名乐设。
ls()函數(shù)可以使用模式來匹配變量名。

# List the variables starting with the pattern "var".
print(ls(pattern = "var"))   

當(dāng)我們執(zhí)行上面的代碼绎巨,它產(chǎn)生以下結(jié)果 -

[1] "my var"     "my_new_var" "my_var"     "var.1"      
[5] "var.2"      "var.3"      "var.name"   "var_name2."
[9] "var_x"      "varname"    

以點(.)開頭的變量被隱藏近尚,它們可以使用ls()函數(shù)的“all.names = TRUE”參數(shù)列出。

print(ls(all.name = TRUE))

當(dāng)我們執(zhí)行上面的代碼场勤,它產(chǎn)生以下結(jié)果 -

[1] ".cars"        ".Random.seed" ".var_name"    ".varname"     ".varname2"   
[6] "my var"       "my_new_var"   "my_var"       "var.1"        "var.2"        
[11]"var.3"        "var.name"     "var_name2."   "var_x"  

刪除變量

可以使用rm()函數(shù)刪除變量戈锻。 下面我們刪除變量var.3。 打印時和媳,拋出變量錯誤的值格遭。

rm(var.3)
print(var.3)

當(dāng)我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果 -

[1] "var.3"
Error in print(var.3) : object 'var.3' not found

所有的變量可以通過使用rm()和ls()函數(shù)一起刪除留瞳。

rm(list = ls())
print(ls())

當(dāng)我們執(zhí)行上面的代碼拒迅,它產(chǎn)生以下結(jié)果 -

character(0)

五.運算符

運算符是一個符號,通知編譯器執(zhí)行特定的數(shù)學(xué)或邏輯操作她倘。 R語言具有豐富的內(nèi)置運算符坪它,并提供以下類型的運算符。

運算符的類型

R語言中擁有如下幾種運算符類型:

  • 算術(shù)運算符
  • 關(guān)系運算符
  • 邏輯運算符
  • 賦值運算符
  • 其他運算符
  • 算術(shù)運算符
    下表顯示了R語言支持的算術(shù)運算符帝牡。 操作符對向量的每個元素起作用往毡。
    除了加減乘除
  • %% 兩個向量求余
  • %/% 兩個向量相除求商
  • ^ 將第二向量作為第一向量的指數(shù)

關(guān)系運算符

即大于小于等于以及不等于

邏輯運算符

下表顯示了R語言支持的邏輯運算符。 它只適用于邏輯靶溜,數(shù)字或復(fù)雜類型的向量开瞭。 所有大于1的數(shù)字被認為是邏輯值TRUE懒震。
將第一向量的每個元素與第二向量的相應(yīng)元素進行比較。 比較的結(jié)果是布爾值嗤详。

  • & 它被稱為元素邏輯AND運算符个扰。 它將第一向量的每個元素與第二向量的相應(yīng)元素組合,并且如果兩個元素都為TRUE葱色,則給出輸出TRUE递宅。
  • | 它被稱為元素邏輯或運算符。 它將第一向量的每個元素與第二向量的相應(yīng)元素組合苍狰,并且如果元素為真办龄,則給出輸出TRUE。
  • ! 它被稱為邏輯非運算符淋昭。 取得向量的每個元素俐填,并給出相反的邏輯值。
    邏輯運算符&&和|| 只考慮向量的第一個元素翔忽,給出單個元素的向量作為輸出英融。
  • && 稱為邏輯AND運算符。 取兩個向量的第一個元素歇式,并且只有兩個都為TRUE時才給出TRUE驶悟。
  • || 稱為邏輯OR運算符。 取兩個向量的第一個元素材失,如果其中一個為TRUE撩银,則給出TRUE。

賦值運算符

這些運算符用于向向量賦值豺憔。

  • <? or = or <<? 稱為左分配
  • -> or ->> 稱為右分配

其他運算符

這些運算符用于特定目的额获,而不是一般的數(shù)學(xué)或邏輯計算。

  • : 冒號運算符恭应。 它為向量按順序創(chuàng)建一系列數(shù)字抄邀。
  • %in% 此運算符用于標識元素是否屬于向量。
  • %*% 此運算符用于將矩陣與其轉(zhuǎn)置相乘昼榛。

六.決策

決策結(jié)構(gòu)要求程序員指定要由程序評估或測試的一個或多個條件境肾,以及如果條件被確定為真則要執(zhí)行的一個或多個語句,如果條件為假則執(zhí)行其他語句胆屿。

以下是在大多數(shù)編程語言中的典型決策結(jié)構(gòu)的一般形式

做決定

R提供以下類型的決策語句奥喻。 單擊以下鏈接以檢查其詳細信息。

if語句由一個布爾表達式后跟一個或多個語句組成非迹。

if語句后面可以有一個可選的else語句环鲤,當(dāng)布爾表達式為false時執(zhí)行。

switch語句允許根據(jù)值列表測試變量的相等性憎兽。

七.包

R語言的包是R函數(shù)冷离,編譯代碼和樣本數(shù)據(jù)的集合吵冒。 它們存儲在R語言環(huán)境中名為“l(fā)ibrary”的目錄下。 默認情況下西剥,R語言在安裝期間安裝一組軟件包痹栖。 隨后添加更多包,當(dāng)它們用于某些特定目的時瞭空。 當(dāng)我們啟動R語言控制臺時揪阿,默認情況下只有默認包可用。 已經(jīng)安裝的其他軟件包必須顯式加載以供將要使用它們的R語言程序使用咆畏。

所有可用的R語言包都列在R語言的包南捂。
下面是用于檢查,驗證和使用R包的命令列表鳖眼。

檢查可用R語言的包

獲取包含R包的庫位置

.libPaths()

當(dāng)我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果嚼摩。 它可能會根據(jù)您的電腦的本地設(shè)置而有所不同钦讳。

[2] "C:/Program Files/R/R-3.2.2/library"

獲取已安裝的所有軟件包列表

library()

當(dāng)我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果枕面。 它可能會根據(jù)您的電腦的本地設(shè)置而有所不同愿卒。

Packages in library ‘C:/Program Files/R/R-3.2.2/library’:

base                    The R Base Package
boot                    Bootstrap Functions (Originally by Angelo Canty
                        for S)
class                   Functions for Classification
cluster                 "Finding Groups in Data": Cluster Analysis
                        Extended Rousseeuw et al.
codetools               Code Analysis Tools for R
compiler                The R Compiler Package

獲取當(dāng)前在R環(huán)境中加載的所有包

search()

當(dāng)我們執(zhí)行上述代碼時,它產(chǎn)生了以下結(jié)果潮秘。它會根據(jù)你的個人電腦的本地設(shè)置而異琼开。

[1] ".GlobalEnv"        "package:stats"     "package:graphics" 
[4] "package:grDevices" "package:utils"     "package:datasets" 
[7] "package:methods"   "Autoloads"         "package:base" 

安裝一個新的軟件包

有兩種方法來添加新的R包。 一個是直接從CRAN目錄安裝枕荞,另一個是將軟件包下載到本地系統(tǒng)并手動安裝它柜候。

直接從CRAN安裝

以下命令直接從CRAN網(wǎng)頁獲取軟件包,并將軟件包安裝在R環(huán)境中躏精。 可能會提示您選擇最近的鏡像渣刷。 根據(jù)您的位置選擇一個。

# Install the package named "XML".
 install.packages("XML")
手動安裝包

轉(zhuǎn)到鏈接R Packages下載所需的包矗烛。 將包作為.zip文件保存在本地系統(tǒng)中的適當(dāng)位置辅柴。
現(xiàn)在您可以運行以下命令在R環(huán)境中安裝此軟件包。

# Install the package named "XML"
install.packages("E:/XML_3.98-1.3.zip", repos = NULL, type = "source")

裝載包到庫中

在包可以在代碼中使用之前瞭吃,必須將其加載到當(dāng)前R環(huán)境中碌嘀。 您還需要加載先前已安裝但在當(dāng)前環(huán)境中不可用的軟件包。

使用以下命令加載包:

library("package Name", lib.loc = "path to library")

# Load the package named "XML"
install.packages("E:/XML_3.98-1.3.zip", repos = NULL, type = "source")

九.循環(huán)

可能有一種情況歪架,當(dāng)你需要執(zhí)行一段代碼幾次股冗。 通常,順序執(zhí)行語句和蚪。 首先執(zhí)行函數(shù)中的第一個語句魁瞪,然后執(zhí)行第二個語句穆律,依此類推。

編程語言提供允許更復(fù)雜的執(zhí)行路徑的各種控制結(jié)構(gòu)导俘。

循環(huán)語句允許我們多次執(zhí)行一個語句或一組語句峦耘,以下是大多數(shù)編程語言中循環(huán)語句的一般形式 -

環(huán)路結(jié)構(gòu)

R編程語言提供以下種類的循環(huán)來處理循環(huán)需求。 單擊以下鏈接以檢查其詳細信息旅薄。

多次執(zhí)行一系列語句辅髓,并簡化管理循環(huán)變量的代碼。

在給定條件為真時少梁,重復(fù)語句或語句組洛口。 它在執(zhí)行循環(huán)體之前測試條件。

像while語句凯沪,不同之處在于它測試在循環(huán)體的端部的條件第焰。

循環(huán)控制語句

循環(huán)控制語句從其正常序列改變執(zhí)行。 當(dāng)執(zhí)行離開作用域時妨马,在該作用域中創(chuàng)建的所有自動對象都將被銷毀挺举。
R語言支持以下控制語句。 單擊以下鏈接以檢查其詳細信息烘跺。

終止循環(huán)語句湘纵,并將執(zhí)行轉(zhuǎn)移到循環(huán)后立即執(zhí)行的語句。

next語句模擬R語言switch語句的行為滤淳。

十.數(shù)據(jù)重塑

R語言中的數(shù)據(jù)重塑是關(guān)于改變數(shù)據(jù)被組織成行和列的方式梧喷。 大多數(shù)時間R語言中的數(shù)據(jù)處理是通過將輸入數(shù)據(jù)作為數(shù)據(jù)幀來完成的。 很容易從數(shù)據(jù)幀的行和列中提取數(shù)據(jù)脖咐,但是在某些情況下铺敌,我們需要的數(shù)據(jù)幀格式與我們接收數(shù)據(jù)幀的格式不同。 R語言具有許多功能屁擅,在數(shù)據(jù)幀中拆分适刀,合并和將行更改為列,反之亦然煤蹭。

于數(shù)據(jù)幀中加入列和行

我們可以使用cbind()函數(shù)連接多個向量來創(chuàng)建數(shù)據(jù)幀笔喉。 此外,我們可以使用rbind()函數(shù)合并兩個數(shù)據(jù)幀硝皂。

# Create vector objects.
city <- c("Tampa","Seattle","Hartford","Denver")
state <- c("FL","WA","CT","CO")
zipcode <- c(33602,98104,06161,80294)

# Combine above three vectors into one data frame.
addresses <- cbind(city,state,zipcode)

# Print a header.
cat("# # # # The First data frame
") 

# Print the data frame.
print(addresses)

# Create another data frame with similar columns
new.address <- data.frame(
   city = c("Lowry","Charlotte"),
   state = c("CO","FL"),
   zipcode = c("80230","33949"),
   stringsAsFactors = FALSE
)

# Print a header.
cat("# # # The Second data frame
") 

# Print the data frame.
print(new.address)

# Combine rows form both the data frames.
all.addresses <- rbind(addresses,new.address)

# Print a header.
cat("# # # The combined data frame
") 

# Print the result.
print(all.addresses)

當(dāng)我們執(zhí)行上面的代碼常挚,它產(chǎn)生以下結(jié)果 -

# # # # The First data frame
     city       state zipcode
[1,] "Tampa"    "FL"  "33602"
[2,] "Seattle"  "WA"  "98104"
[3,] "Hartford" "CT"   "6161" 
[4,] "Denver"   "CO"  "80294"

# # # The Second data frame
       city       state   zipcode
1      Lowry      CO      80230
2      Charlotte  FL      33949

# # # The combined data frame
       city      state zipcode
1      Tampa     FL    33602
2      Seattle   WA    98104
3      Hartford  CT     6161
4      Denver    CO    80294
5      Lowry     CO    80230
6     Charlotte  FL    33949

合并數(shù)據(jù)幀

我們可以使用merge()函數(shù)合并兩個數(shù)據(jù)幀。 數(shù)據(jù)幀必須具有相同的列名稱稽物,在其上進行合并奄毡。

在下面的例子中,我們考慮圖書館名稱“MASS”中有關(guān)Pima Indian Women的糖尿病的數(shù)據(jù)集贝或。 我們基于血壓(“bp”)和體重指數(shù)(“bmi”)的值合并兩個數(shù)據(jù)集吼过。 在選擇這兩列用于合并時锐秦,其中這兩個變量的值在兩個數(shù)據(jù)集中匹配的記錄被組合在一起以形成單個數(shù)據(jù)幀。

library(MASS)
merged.Pima <- merge(x = Pima.te, y = Pima.tr,
   by.x = c("bp", "bmi"),
   by.y = c("bp", "bmi")
)
print(merged.Pima)
nrow(merged.Pima)

當(dāng)我們執(zhí)行上面的代碼盗忱,它產(chǎn)生以下結(jié)果 -

   bp  bmi npreg.x glu.x skin.x ped.x age.x type.x npreg.y glu.y skin.y ped.y
1  60 33.8       1   117     23 0.466    27     No       2   125     20 0.088
2  64 29.7       2    75     24 0.370    33     No       2   100     23 0.368
3  64 31.2       5   189     33 0.583    29    Yes       3   158     13 0.295
4  64 33.2       4   117     27 0.230    24     No       1    96     27 0.289
5  66 38.1       3   115     39 0.150    28     No       1   114     36 0.289
6  68 38.5       2   100     25 0.324    26     No       7   129     49 0.439
7  70 27.4       1   116     28 0.204    21     No       0   124     20 0.254
8  70 33.1       4    91     32 0.446    22     No       9   123     44 0.374
9  70 35.4       9   124     33 0.282    34     No       6   134     23 0.542
10 72 25.6       1   157     21 0.123    24     No       4    99     17 0.294
11 72 37.7       5    95     33 0.370    27     No       6   103     32 0.324
12 74 25.9       9   134     33 0.460    81     No       8   126     38 0.162
13 74 25.9       1    95     21 0.673    36     No       8   126     38 0.162
14 78 27.6       5    88     30 0.258    37     No       6   125     31 0.565
15 78 27.6      10   122     31 0.512    45     No       6   125     31 0.565
16 78 39.4       2   112     50 0.175    24     No       4   112     40 0.236
17 88 34.5       1   117     24 0.403    40    Yes       4   127     11 0.598
   age.y type.y
1     31     No
2     21     No
3     24     No
4     21     No
5     21     No
6     43    Yes
7     36    Yes
8     40     No
9     29    Yes
10    28     No
11    55     No
12    39     No
13    39     No
14    49    Yes
15    49    Yes
16    38     No
17    28     No
[1] 17

melt()拆分數(shù)據(jù)和cast()數(shù)據(jù)重構(gòu)

R語言編程的一個最有趣的方面是關(guān)于在多個步驟中改變數(shù)據(jù)的形狀以獲得期望的形狀酱床。 用于執(zhí)行此操作的函數(shù)稱為melt()和cast()。

我們考慮稱為船舶的數(shù)據(jù)集稱為“MASS”趟佃。

library(MASS)
print(ships)

當(dāng)我們執(zhí)行上面的代碼扇谣,它產(chǎn)生以下結(jié)果 -

     type year   period   service   incidents
1     A   60     60        127         0
2     A   60     75         63         0
3     A   65     60       1095         3
4     A   65     75       1095         4
5     A   70     60       1512         6
.............
.............
8     A   75     75       2244         11
9     B   60     60      44882         39
10    B   60     75      17176         29
11    B   65     60      28609         58
............
............
17    C   60     60      1179          1
18    C   60     75       552          1
19    C   65     60       781          0
............
............

melt()拆分數(shù)據(jù)

現(xiàn)在我們拆分數(shù)據(jù)進行重組,將除類型和年份以外的所有列轉(zhuǎn)換為多行展示闲昭。

molten.ships <- melt(ships, id = c("type","year"))
print(molten.ships)

當(dāng)我們執(zhí)行上面的代碼罐寨,它產(chǎn)生以下結(jié)果 -

      type year  variable  value
1      A   60    period      60
2      A   60    period      75
3      A   65    period      60
4      A   65    period      75
............
............
9      B   60    period      60
10     B   60    period      75
11     B   65    period      60
12     B   65    period      75
13     B   70    period      60
...........
...........
41     A   60    service    127
42     A   60    service     63
43     A   65    service   1095
...........
...........
70     D   70    service   1208
71     D   75    service      0
72     D   75    service   2051
73     E   60    service     45
74     E   60    service      0
75     E   65    service    789
...........
...........
101    C   70    incidents    6
102    C   70    incidents    2
103    C   75    incidents    0
104    C   75    incidents    1
105    D   60    incidents    0
106    D   60    incidents    0
...........
...........

cast()重構(gòu)數(shù)據(jù)

我們可以將被拆分的數(shù)據(jù)轉(zhuǎn)換為一種新形式,使用cast()函數(shù)創(chuàng)建每年每種類型的船的總和序矩。

recasted.ship <- cast(molten.ships, type+year~variable,sum)
print(recasted.ship)

當(dāng)我們執(zhí)行上面的代碼鸯绿,它產(chǎn)生以下結(jié)果 -

     type year  period  service  incidents
1     A   60    135       190      0
2     A   65    135      2190      7
3     A   70    135      4865     24
4     A   75    135      2244     11
5     B   60    135     62058     68
6     B   65    135     48979    111
7     B   70    135     20163     56
8     B   75    135      7117     18
9     C   60    135      1731      2
10    C   65    135      1457      1
11    C   70    135      2731      8
12    C   75    135       274      1
13    D   60    135       356      0
14    D   65    135       480      0
15    D   70    135      1557     13
16    D   75    135      2051      4
17    E   60    135        45      0
18    E   65    135      1226     14
19    E   70    135      3318     17
20    E   75    135       542      1

十一.函數(shù)

函數(shù)是一組組合在一起以執(zhí)行特定任務(wù)的語句。 R語言具有大量內(nèi)置函數(shù)簸淀,用戶可以創(chuàng)建自己的函數(shù)瓶蝴。

在R語言中,函數(shù)是一個對象啃擦,因此R語言解釋器能夠?qū)⒖刂苽鬟f給函數(shù)囊蓝,以及函數(shù)完成動作所需的參數(shù)饿悬。

該函數(shù)依次執(zhí)行其任務(wù)并將控制返回到解釋器以及可以存儲在其他對象中的任何結(jié)果令蛉。

函數(shù)定義

使用關(guān)鍵字函數(shù)創(chuàng)建R語言的函數(shù)。 R語言的函數(shù)定義的基本語法如下

function_name <- function(arg_1, arg_2, ...) {
   Function body 
}

函數(shù)組件

函數(shù)的不同部分 -

  • 函數(shù)名稱 -這是函數(shù)的實際名稱狡恬。 它作為具有此名稱的對象存儲在R環(huán)境中珠叔。

  • 參數(shù) -參數(shù)是一個占位符。 當(dāng)函數(shù)被調(diào)用時弟劲,你傳遞一個值到參數(shù)祷安。 參數(shù)是可選的; 也就是說,一個函數(shù)可能不包含參數(shù)兔乞。 參數(shù)也可以有默認值汇鞭。

  • 函數(shù)體 -函數(shù)體包含定義函數(shù)的功能的語句集合。

  • 返回值 -函數(shù)的返回值是要評估的函數(shù)體中的最后一個表達式庸追。
    R語言有許多內(nèi)置函數(shù)霍骄,可以在程序中直接調(diào)用而無需先定義它們。我們還可以創(chuàng)建和使用我們自己的函數(shù)淡溯,稱為用戶定義的函數(shù)读整。

內(nèi)置功能

內(nèi)置函數(shù)的簡單示例是seq(),mean()咱娶,max()米间,sum(x)和paste(...)等强品。它們由用戶編寫的程序直接調(diào)用。 您可以參考最廣泛使用的R函數(shù)屈糊。

# Create a sequence of numbers from 32 to 44.
print(seq(32,44))

# Find mean of numbers from 25 to 82.
print(mean(25:82))

# Find sum of numbers frm 41 to 68.
print(sum(41:68))

當(dāng)我們執(zhí)行上面的代碼的榛,它產(chǎn)生以下結(jié)果 -

[1] 32 33 34 35 36 37 38 39 40 41 42 43 44
[1] 53.5
[1] 1526

用戶定義的函數(shù)

我們可以在R語言中創(chuàng)建用戶定義的函數(shù)。它們特定于用戶想要的另玖,一旦創(chuàng)建困曙,它們就可以像內(nèi)置函數(shù)一樣使用。 下面是一個創(chuàng)建和使用函數(shù)的例子谦去。

# Create a function to print squares of numbers in sequence.
new.function <- function(a) {
   for(i in 1:a) {
      b <- i^2
      print(b)
   }
}   

調(diào)用函數(shù)

# Create a function to print squares of numbers in sequence.
new.function <- function(a) {
   for(i in 1:a) {
      b <- i^2
      print(b)
   }
}

# Call the function new.function supplying 6 as an argument.
new.function(6)

當(dāng)我們執(zhí)行上面的代碼慷丽,它產(chǎn)生以下結(jié)果 -

[1] 1
[1] 4
[1] 9
[1] 16
[1] 25
[1] 36

調(diào)用沒有參數(shù)的函數(shù)

# Create a function without an argument.
new.function <- function() {
   for(i in 1:5) {
      print(i^2)
   }
}   

# Call the function without supplying an argument.
new.function()

當(dāng)我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果 -

[1] 1
[1] 4
[1] 9
[1] 16
[1] 25

使用參數(shù)值調(diào)用函數(shù)(按位置和名稱)
函數(shù)調(diào)用的參數(shù)可以按照函數(shù)中定義的順序提供鳄哭,也可以以不同的順序提供要糊,但分配給參數(shù)的名稱。

# Create a function with arguments.
new.function <- function(a,b,c) {
   result <- a * b + c
   print(result)
}

# Call the function by position of arguments.
new.function(5,3,11)

# Call the function by names of the arguments.
new.function(a = 11, b = 5, c = 3)

當(dāng)我們執(zhí)行上面的代碼妆丘,它產(chǎn)生以下結(jié)果 -

[1] 26
[1] 58

使用默認參數(shù)調(diào)用函數(shù)
我們可以在函數(shù)定義中定義參數(shù)的值锄俄,并調(diào)用函數(shù)而不提供任何參數(shù)以獲取默認結(jié)果。 但是我們也可以通過提供參數(shù)的新值來獲得非默認結(jié)果來調(diào)用這樣的函數(shù)勺拣。

# Create a function with arguments.
new.function <- function(a = 3, b = 6) {
   result <- a * b
   print(result)
}

# Call the function without giving any argument.
new.function()

# Call the function with giving new values of the argument.
new.function(9,5)

當(dāng)我們執(zhí)行上面的代碼奶赠,它產(chǎn)生以下結(jié)果 -

[1] 18
[1] 45

功能的延遲計算
對函數(shù)的參數(shù)進行延遲評估,這意味著它們只有在函數(shù)體需要時才進行評估药有。

# Create a function with arguments.
new.function <- function(a, b) {
   print(a^2)
   print(a)
   print(b)
}

# Evaluate the function without supplying one of the arguments.
new.function(6)

當(dāng)我們執(zhí)行上面的代碼毅戈,它產(chǎn)生以下結(jié)果 -

[1] 36
[1] 6
Error in print(b) : argument "b" is missing, with no default

十二.字符串

在R語言中的單引號或雙引號對中寫入的任何值都被視為字符串.R語言存儲的每個字符串都在雙引號內(nèi),即使是使用單引號創(chuàng)建的依舊如此愤惰。

在字符串構(gòu)造中應(yīng)用的規(guī)則

在字符串的開頭和結(jié)尾的引號應(yīng)該是兩個雙引號或兩個單引號苇经。它們不能被混合。

  • 雙引號可以插入到以單引號開頭和結(jié)尾的字符串中宦言。

  • 單引號可以插入以雙引號開頭和結(jié)尾的字符串扇单。

  • 雙引號不能插入以雙引號開頭和結(jié)尾的字符串窄绒。

  • 單引號不能插入以單引號開頭和結(jié)尾的字符串段誊。

有效字符串的示例

以下示例闡明了在? 語言中創(chuàng)建33字符串的規(guī)則汹买。

a <- 'Start and end with single quote'
print(a)

b <- "Start and end with double quotes"
print(b)

c <- "single quote ' in between double quotes"
print(c)

d <- 'Double quotes " in between single quote'
print(d)

當(dāng)運行上面的代碼奉件,我們得到以下輸出 -

[1] "Start and end with single quote"
[1] "Start and end with double quotes"
[1] "single quote ' in between double quote"
[1] "Double quote " in between single quote"
無效字符串的示例
e <- 'Mixed quotes" 
print(e)

f <- 'Single quote ' inside single quote'
print(f)

g <- "Double quotes " inside double quotes"
print(g)

當(dāng)我們運行腳本失敗給下面的結(jié)果笋轨。

...: unexpected INCOMPLETE_STRING

.... unexpected symbol 
1: f <- 'Single quote ' inside

unexpected symbol
1: g <- "Double quotes " inside

字符串操作

連接字符串 - paste()函數(shù)

R 語言中的許多字符串使用paste()函數(shù)組合自赔。它可以采取任何數(shù)量的參數(shù)組合在一起旨涝。

語法

對于粘貼功能的基本語法是 -

paste(..., sep = " ", collapse = NULL)

以下是所使用的參數(shù)的說明 -

  • ...表示要組合的任意數(shù)量的自變量套媚。

  • 九月表示參數(shù)之間的任何分隔符稽寒。它是可選的扮碧。

  • collapse用于消除兩個字符串之間的空格。但不是一個字符串的兩個字內(nèi)的空間。

a <- "Hello"
b <- 'How'
c <- "are you? "

print(paste(a,b,c))

print(paste(a,b,c, sep = "-"))

print(paste(a,b,c, sep = "", collapse = ""))

當(dāng)我們執(zhí)行上面的代碼慎王,它產(chǎn)生以下結(jié)果 -

[1] "Hello How are you? "
[1] "Hello-How-are you? "
[1] "HelloHoware you? "
格式化數(shù)字和字符串 - format()函數(shù)

可以使用格式()函數(shù)將數(shù)字和字符串格式化為特定樣式蚓土。

語法

格式化函數(shù)的基本語法是 -

format(x, digits, nsmall, scientific, width, justify = c("left", "right", "centre", "none")) 

以下是所使用的參數(shù)的描述 -

  • X是向量輸入。

  • 數(shù)字是顯示的總位數(shù)赖淤。

  • nsmall是小數(shù)點右邊的最小位數(shù)蜀漆。

  • 科學(xué)設(shè)置為TRUE以顯示科學(xué)記數(shù)法。

  • 寬度指示通過在開始處填充空白來顯示的最小寬度咱旱。

  • 理由是字符串向左确丢,右或中心的顯示。

# Total number of digits displayed. Last digit rounded off.
result <- format(23.123456789, digits = 9)
print(result)

# Display numbers in scientific notation.
result <- format(c(6, 13.14521), scientific = TRUE)
print(result)

# The minimum number of digits to the right of the decimal point.
result <- format(23.47, nsmall = 5)
print(result)

# Format treats everything as a string.
result <- format(6)
print(result)

# Numbers are padded with blank in the beginning for width.
result <- format(13.7, width = 6)
print(result)

# Left justify strings.
result <- format("Hello", width = 8, justify = "l")
print(result)

# Justfy string with center.
result <- format("Hello", width = 8, justify = "c")
print(result)

當(dāng)我們執(zhí)行上面的代碼吐限,它產(chǎn)生以下結(jié)果 -

[1] "23.1234568"
[1] "6.000000e+00" "1.314521e+01"
[1] "23.47000"
[1] "6"
[1] "  13.7"
[1] "Hello   "
[1] " Hello  "
計算字符串中的字符數(shù) - nchar()函數(shù)

此函數(shù)計算字符串中包含空格的字符數(shù)鲜侥。

語法

nchar()函數(shù)的基本語法是 -

nchar(x)
以下是所使用的參數(shù)的描述 -

  • X是向量輸入。

result <- nchar("Count the number of characters")
print(result)

當(dāng)我們執(zhí)行上面的代碼诸典,它產(chǎn)生以下結(jié)果 -

[1] 30
更改案例 - toupper()和tolower()函數(shù)

這些函數(shù)改變字符串的字符的大小寫描函。

語法

toupper()和tolower()函數(shù)的基本語法是 -

toupper(x)
tolower(x)

以下是所使用的參數(shù)的描述 -

  • X是向量輸入。

# Changing to Upper case.
result <- toupper("Changing To Upper")
print(result)

# Changing to lower case.
result <- tolower("Changing To Lower")
print(result)

當(dāng)我們執(zhí)行上面的代碼狐粱,它產(chǎn)生以下結(jié)果 -

[1] "CHANGING TO UPPER"
[1] "changing to lower"
提取字符串的一部分 - substring()函數(shù)

此函數(shù)提取字符串的部分舀寓。

語法

substring()函數(shù)的基本語法是 -

substring(x,first,last)

以下是所使用的參數(shù)的描述 -

  • X是字符向量輸入。

  • 首先是要提取的第一個字符的位置肌蜻。

  • 最后是要提取的最后一個字符的位置互墓。

# Extract characters from 5th to 7th position.
result <- substring("Extract", 5, 7)
print(result)

當(dāng)我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果 -

[1] "act"

十三.向量

向量是最基本的R語言數(shù)據(jù)對象蒋搜,有六種類型的原子向量篡撵。 它們是邏輯,整數(shù)齿诞,雙精度酸休,復(fù)雜骂租,字符和原始祷杈。

創(chuàng)建向量

單元素向量

即使在R語言中只寫入一個值,它也將成為長度為1的向量渗饮,并且屬于上述向量類型之一但汞。

# Atomic vector of type character.
print("abc");

# Atomic vector of type double.
print(12.5)

# Atomic vector of type integer.
print(63L)

# Atomic vector of type logical.
print(TRUE)

# Atomic vector of type complex.
print(2+3i)

# Atomic vector of type raw.
print(charToRaw('hello'))

當(dāng)我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果 -

[1] "abc"
[1] 12.5
[1] 63
[1] TRUE
[1] 2+3i
[1] 68 65 6c 6c 6f
多元素向量

對數(shù)值數(shù)據(jù)使用冒號運算符

# Creating a sequence from 5 to 13.
v <- 5:13
print(v)

# Creating a sequence from 6.6 to 12.6.
v <- 6.6:12.6
print(v)

# If the final element specified does not belong to the sequence then it is discarded.
v <- 3.8:11.4
print(v)

當(dāng)我們執(zhí)行上面的代碼互站,它產(chǎn)生以下結(jié)果 -

[1]  5  6  7  8  9 10 11 12 13
[1]  6.6  7.6  8.6  9.6 10.6 11.6 12.6
[1]  3.8  4.8  5.8  6.8  7.8  8.8  9.8 10.8
使用sequence (Seq.)序列運算符
# Create vector with elements from 5 to 9 incrementing by 0.4.
print(seq(5, 9, by = 0.4))

當(dāng)我們執(zhí)行上面的代碼私蕾,它產(chǎn)生以下結(jié)果 -

[1] 5.0 5.4 5.8 6.2 6.6 7.0 7.4 7.8 8.2 8.6 9.0
使用C()函數(shù)

如果其中一個元素是字符,則非字符值被強制轉(zhuǎn)換為字符類型胡桃。

# The logical and numeric values are converted to characters.
s <- c('apple','red',5,TRUE)
print(s)

當(dāng)我們執(zhí)行上面的代碼踩叭,它產(chǎn)生以下結(jié)果 -

[1] "apple" "red"   "5"     "TRUE" 

訪問向量元素

使用索引訪問向量的元素。 []括號用于建立索引。 索引從位置1開始容贝。在索引中給出負值會丟棄來自result.TRUE自脯,F(xiàn)ALSE或0和1的元素,也可用于索引斤富。

# Accessing vector elements using position.
t <- c("Sun","Mon","Tue","Wed","Thurs","Fri","Sat")
u <- t[c(2,3,6)]
print(u)

# Accessing vector elements using logical indexing.
v <- t[c(TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE)]
print(v)

# Accessing vector elements using negative indexing.
x <- t[c(-2,-5)]
print(x)

# Accessing vector elements using 0/1 indexing.
y <- t[c(0,0,0,0,0,0,1)]
print(y)

當(dāng)我們執(zhí)行上面的代碼膏潮,它產(chǎn)生以下結(jié)果 -

[1] "Mon" "Tue" "Fri"
[1] "Sun" "Fri"
[1] "Sun" "Tue" "Wed" "Fri" "Sat"
[1] "Sun"

向量操作

向量運算

可以添加,減去满力,相乘或相除兩個相同長度的向量焕参,將結(jié)果作為向量輸出。

# Create two vectors.
v1 <- c(3,8,4,5,0,11)
v2 <- c(4,11,0,8,1,2)

# Vector addition.
add.result <- v1+v2
print(add.result)

# Vector substraction.
sub.result <- v1-v2
print(sub.result)

# Vector multiplication.
multi.result <- v1*v2
print(multi.result)

# Vector division.
divi.result <- v1/v2
print(divi.result)

當(dāng)我們執(zhí)行上面的代碼油额,它產(chǎn)生以下結(jié)果 -

[1]  7 19  4 13  1 13
[1] -1 -3  4 -3 -1  9
[1] 12 88  0 40  0 22
[1] 0.7500000 0.7272727       Inf 0.6250000 0.0000000 5.5000000
向量元素回收

如果我們對不等長的兩個向量應(yīng)用算術(shù)運算叠纷,則較短向量的元素被循環(huán)以完成操作。

v1 <- c(3,8,4,5,0,11)
v2 <- c(4,11)
# V2 becomes c(4,11,4,11,4,11)

add.result <- v1+v2
print(add.result)

sub.result <- v1-v2
print(sub.result)

當(dāng)我們執(zhí)行上面的代碼潦嘶,它產(chǎn)生以下結(jié)果 -

[1]  7 19  8 16  4 22
[1] -1 -3  0 -6 -4  0

向量元素排序

向量中的元素可以使用sort()函數(shù)排序讲岁。

v <- c(3,8,4,5,0,11, -9, 304)

# Sort the elements of the vector.
sort.result <- sort(v)
print(sort.result)

# Sort the elements in the reverse order.
revsort.result <- sort(v, decreasing = TRUE)
print(revsort.result)

# Sorting character vectors.
v <- c("Red","Blue","yellow","violet")
sort.result <- sort(v)
print(sort.result)

# Sorting character vectors in reverse order.
revsort.result <- sort(v, decreasing = TRUE)
print(revsort.result)

當(dāng)我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果 -

[1]  -9   0   3   4   5   8  11 304
[1] 304  11   8   5   4   3   0  -9
[1] "Blue"   "Red"    "violet" "yellow"
[1] "yellow" "violet" "Red"    "Blue" 

十四.列表

列表是R語言對象衬以,它包含不同類型的元素缓艳,如數(shù)字,字符串看峻,向量和其中的另一個列表阶淘。列表還可以包含矩陣或函數(shù)作為其元素。列表是使用list()函數(shù)創(chuàng)建的互妓。

創(chuàng)建列表

以下是創(chuàng)建包含字符串溪窒,數(shù)字,向量和邏輯值的列表的示例

# Create a list containing strings, numbers, vectors and a logical values.
list_data <- list("Red", "Green", c(21,32,11), TRUE, 51.23, 119.1)
print(list_data)

當(dāng)我們執(zhí)行上面的代碼冯勉,它產(chǎn)生以下結(jié)果 -

[[1]]
[1] "Red"

[[2]]
[1] "Green"

[[3]]
[1] 21 32 11

[[4]]
[1] TRUE

[[5]]
[1] 51.23

[[6]]
[1] 119.1

命名列表元素

列表元素可以給出名稱澈蚌,并且可以使用這些名稱訪問它們。

# Create a list containing a vector, a matrix and a list.
list_data <- list(c("Jan","Feb","Mar"), matrix(c(3,9,5,1,-2,8), nrow = 2),
   list("green",12.3))

# Give names to the elements in the list.
names(list_data) <- c("1st Quarter", "A_Matrix", "A Inner list")

# Show the list.
print(list_data)

當(dāng)我們執(zhí)行上面的代碼灼狰,它產(chǎn)生以下結(jié)果 -

$`1st_Quarter`
[1] "Jan" "Feb" "Mar"

$A_Matrix
     [,1] [,2] [,3]
[1,]    3    5   -2
[2,]    9    1    8

$A_Inner_list
$A_Inner_list[[1]]
[1] "green"

$A_Inner_list[[2]]
[1] 12.3

訪問列表元素

列表的元素可以通過列表中元素的索引訪問宛瞄。在命名列表的情況下,它也可以使用名稱來訪問交胚。

我們繼續(xù)使用在上面的例子列表 -

# Create a list containing a vector, a matrix and a list.
list_data <- list(c("Jan","Feb","Mar"), matrix(c(3,9,5,1,-2,8), nrow = 2),
   list("green",12.3))

# Give names to the elements in the list.
names(list_data) <- c("1st Quarter", "A_Matrix", "A Inner list")

# Access the first element of the list.
print(list_data[1])

# Access the thrid element. As it is also a list, all its elements will be printed.
print(list_data[3])

# Access the list element using the name of the element.
print(list_data$A_Matrix)

當(dāng)我們執(zhí)行上面的代碼份汗,它產(chǎn)生以下結(jié)果 -

$`1st_Quarter`
[1] "Jan" "Feb" "Mar"

$A_Inner_list
$A_Inner_list[[1]]
[1] "green"

$A_Inner_list[[2]]
[1] 12.3

     [,1] [,2] [,3]
[1,]    3    5   -2
[2,]    9    1    8

操控列表元素

我們可以添加,刪除和更新列表元素蝴簇,如下所示杯活。我們只能在列表的末尾添加和刪除元素。但我們可以更新任何元素熬词。

# Create a list containing a vector, a matrix and a list.
list_data <- list(c("Jan","Feb","Mar"), matrix(c(3,9,5,1,-2,8), nrow = 2),
   list("green",12.3))

# Give names to the elements in the list.
names(list_data) <- c("1st Quarter", "A_Matrix", "A Inner list")

# Add element at the end of the list.
list_data[4] <- "New element"
print(list_data[4])

# Remove the last element.
list_data[4] <- NULL

# Print the 4th Element.
print(list_data[4])

# Update the 3rd Element.
list_data[3] <- "updated element"
print(list_data[3])

當(dāng)我們執(zhí)行上面的代碼旁钧,它產(chǎn)生以下結(jié)果 -

[[1]]
[1] "New element"

$
NULL

$`A Inner list`
[1] "updated element"

合并列表

通過將所有列表放在一個列表()函數(shù)中吸重,您可以將許多列表合并到一個列表中。

# Create two lists.
list1 <- list(1,2,3)
list2 <- list("Sun","Mon","Tue")

# Merge the two lists.
merged.list <- c(list1,list2)

# Print the merged list.
print(merged.list)

當(dāng)我們執(zhí)行上面的代碼歪今,它產(chǎn)生以下結(jié)果 -

[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

[[4]]
[1] "Sun"

[[5]]
[1] "Mon"

[[6]]
[1] "Tue"

將列表轉(zhuǎn)換為向量

列表可以轉(zhuǎn)換為向量晤锹,使得向量的元素可以用于進一步的操作⊥可以在將列表轉(zhuǎn)換為向量之后應(yīng)用對向量的所有算術(shù)運算鞭铆。要做這個轉(zhuǎn)換,我們使用unlist()函數(shù)焦影。它將列表作為輸入并生成向量车遂。

# Create lists.
list1 <- list(1:5)
print(list1)

list2 <-list(10:14)
print(list2)

# Convert the lists to vectors.
v1 <- unlist(list1)
v2 <- unlist(list2)

print(v1)
print(v2)

# Now add the vectors
result <- v1+v2
print(result)

當(dāng)我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果 -

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

[[1]]
[1] 10 11 12 13 14

[1] 1 2 3 4 5
[1] 10 11 12 13 14
[1] 11 13 15 17 19

十五.矩陣

矩陣是其中元素以二維矩形布局布置的R對象斯辰。 它們包含相同原子類型的元素舶担。 雖然我們可以創(chuàng)建一個只包含字符或只包含邏輯值的矩陣,但它們沒有太多用處彬呻。 我們使用包含數(shù)字元素的矩陣用于數(shù)學(xué)計算衣陶。

使用matrix()函數(shù)創(chuàng)建一個矩陣。

語法

在R語言中創(chuàng)建矩陣的基本語法是 -

matrix(data, nrow, ncol, byrow, dimnames)

以下是所使用的參數(shù)的說明 -

  • 數(shù)據(jù)是成為矩陣的數(shù)據(jù)元素的輸入向量闸氮。

  • nrow是要創(chuàng)建的行數(shù)剪况。

  • ncol是要創(chuàng)建的列數(shù)。

  • byrow是一個邏輯線索蒲跨。 如果為TRUE译断,則輸入向量元素按行排列。

  • dimname是分配給行和列的名稱或悲。

創(chuàng)建一個以數(shù)字向量作為輸入的矩陣

# Elements are arranged sequentially by row.
M <- matrix(c(3:14), nrow = 4, byrow = TRUE)
print(M)

# Elements are arranged sequentially by column.
N <- matrix(c(3:14), nrow = 4, byrow = FALSE)
print(N)

# Define the column and row names.
rownames = c("row1", "row2", "row3", "row4")
colnames = c("col1", "col2", "col3")

P <- matrix(c(3:14), nrow = 4, byrow = TRUE, dimnames = list(rownames, colnames))
print(P)

當(dāng)我們執(zhí)行上面的代碼孙咪,它產(chǎn)生以下結(jié)果 -

     [,1] [,2] [,3]
[1,]    3    4    5
[2,]    6    7    8
[3,]    9   10   11
[4,]   12   13   14
     [,1] [,2] [,3]
[1,]    3    7   11
[2,]    4    8   12
[3,]    5    9   13
[4,]    6   10   14
     col1 col2 col3
row1    3    4    5
row2    6    7    8
row3    9   10   11
row4   12   13   14

訪問矩陣的元素

可以通過使用元素的列和行索引來訪問矩陣的元素。 我們考慮上面的矩陣P找到下面的具體元素巡语。

# Define the column and row names.
rownames = c("row1", "row2", "row3", "row4")
colnames = c("col1", "col2", "col3")

# Create the matrix.
P <- matrix(c(3:14), nrow = 4, byrow = TRUE, dimnames = list(rownames, colnames))

# Access the element at 3rd column and 1st row.
print(P[1,3])

# Access the element at 2nd column and 4th row.
print(P[4,2])

# Access only the  2nd row.
print(P[2,])

# Access only the 3rd column.
print(P[,3])

當(dāng)我們執(zhí)行上面的代碼翎蹈,它產(chǎn)生以下結(jié)果 -

[1] 5
[1] 13
col1 col2 col3 
   6    7    8 
row1 row2 row3 row4 
   5    8   11   14 

矩陣計算

使用R運算符對矩陣執(zhí)行各種數(shù)學(xué)運算。 操作的結(jié)果也是一個矩陣男公。
對于操作中涉及的矩陣荤堪,維度(行數(shù)和列數(shù))應(yīng)該相同。

矩陣加法和減法
# Create two 2x3 matrices.
matrix1 <- matrix(c(3, 9, -1, 4, 2, 6), nrow = 2)
print(matrix1)

matrix2 <- matrix(c(5, 2, 0, 9, 3, 4), nrow = 2)
print(matrix2)

# Add the matrices.
result <- matrix1 + matrix2
cat("Result of addition","
")
print(result)

# Subtract the matrices
result <- matrix1 - matrix2
cat("Result of subtraction","
")
print(result)

當(dāng)我們執(zhí)行上面的代碼理澎,它產(chǎn)生以下結(jié)果 -

     [,1] [,2] [,3]
[1,]    3   -1    2
[2,]    9    4    6
     [,1] [,2] [,3]
[1,]    5    0    3
[2,]    2    9    4
Result of addition 
     [,1] [,2] [,3]
[1,]    8   -1    5
[2,]   11   13   10
Result of subtraction 
     [,1] [,2] [,3]
[1,]   -2   -1   -1
[2,]    7   -5    2
矩陣乘法和除法
# Create two 2x3 matrices.
matrix1 <- matrix(c(3, 9, -1, 4, 2, 6), nrow = 2)
print(matrix1)

matrix2 <- matrix(c(5, 2, 0, 9, 3, 4), nrow = 2)
print(matrix2)

# Multiply the matrices.
result <- matrix1 * matrix2
cat("Result of multiplication","
")
print(result)

# Divide the matrices
result <- matrix1 / matrix2
cat("Result of division","
")
print(result)

當(dāng)我們執(zhí)行上面的代碼逞力,它產(chǎn)生以下結(jié)果 -

     [,1] [,2] [,3]
[1,]    3   -1    2
[2,]    9    4    6
     [,1] [,2] [,3]
[1,]    5    0    3
[2,]    2    9    4
Result of multiplication 
     [,1] [,2] [,3]
[1,]   15    0    6
[2,]   18   36   24
Result of division 
     [,1]      [,2]      [,3]
[1,]  0.6      -Inf 0.6666667
[2,]  4.5 0.4444444 1.5000000

十六.數(shù)組

數(shù)組對可以在兩個以上維度中存儲數(shù)據(jù)的R數(shù)據(jù)對象曙寡。例如 - 如果我們創(chuàng)建一個維度(2,3,4)的數(shù)組糠爬,則它創(chuàng)造4個矩形矩陣,每個矩陣具有2行和3列數(shù)組只能存儲數(shù)據(jù)類型举庶。
使用array()函數(shù)創(chuàng)建數(shù)組执隧。它使用向量作為輸入,并使用dim參數(shù)中的值創(chuàng)建數(shù)組。

以下示例創(chuàng)建一個由兩個3x3的矩陣組成的數(shù)組镀琉,每個矩陣具有3行和3列峦嗤。

# Create two vectors of different lengths.
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)

# Take these vectors as input to the array.
result <- array(c(vector1,vector2),dim = c(3,3,2))
print(result)

當(dāng)我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果 -

, , 1

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15

, , 2

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15

命名列和行

我們可以使用dimnames參數(shù)給數(shù)組中的行屋摔,列和矩陣命名烁设。

# Create two vectors of different lengths.
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)
column.names <- c("COL1","COL2","COL3")
row.names <- c("ROW1","ROW2","ROW3")
matrix.names <- c("Matrix1","Matrix2")

# Take these vectors as input to the array.
result <- array(c(vector1,vector2),dim = c(3,3,2),dimnames = list(row.names,column.names,
   matrix.names))
print(result)

當(dāng)我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果 -

, , Matrix1

     COL1 COL2 COL3
ROW1    5   10   13
ROW2    9   11   14
ROW3    3   12   15

, , Matrix2

     COL1 COL2 COL3
ROW1    5   10   13
ROW2    9   11   14
ROW3    3   12   15

訪問數(shù)組元素

# Create two vectors of different lengths.
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)
column.names <- c("COL1","COL2","COL3")
row.names <- c("ROW1","ROW2","ROW3")
matrix.names <- c("Matrix1","Matrix2")

# Take these vectors as input to the array.
result <- array(c(vector1,vector2),dim = c(3,3,2),dimnames = list(row.names,
   column.names, matrix.names))

# Print the third row of the second matrix of the array.
print(result[3,,2])

# Print the element in the 1st row and 3rd column of the 1st matrix.
print(result[1,3,1])

# Print the 2nd Matrix.
print(result[,,2])

當(dāng)我們執(zhí)行上面的代碼钓试,它產(chǎn)生以下結(jié)果 -

COL1 COL2 COL3 
   3   12   15 
[1] 13
     COL1 COL2 COL3
ROW1    5   10   13
ROW2    9   11   14
ROW3    3   12   15

操作數(shù)組元素

由于數(shù)組由多維構(gòu)成矩陣装黑,所以對數(shù)組元素的操作通過訪問矩陣的元素來執(zhí)行。

# Create two vectors of different lengths.
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)

# Take these vectors as input to the array.
array1 <- array(c(vector1,vector2),dim = c(3,3,2))

# Create two vectors of different lengths.
vector3 <- c(9,1,0)
vector4 <- c(6,0,11,3,14,1,2,6,9)
array2 <- array(c(vector1,vector2),dim = c(3,3,2))

# create matrices from these arrays.
matrix1 <- array1[,,2]
matrix2 <- array2[,,2]

# Add the matrices.
result <- matrix1+matrix2
print(result)

當(dāng)我們執(zhí)行上面的代碼弓熏,它產(chǎn)生以下結(jié)果 -

     [,1] [,2] [,3]
[1,]   10   20   26
[2,]   18   22   28
[3,]    6   24   30

跨數(shù)組元素的計算

我們可以使用適用()函數(shù)在數(shù)組中的元素上進行計算恋谭。

語法

apply(x, margin, fun)

以下是所使用的參數(shù)的說明 -

  • X是一個數(shù)組。

  • 保證金是所使用的數(shù)據(jù)集的名稱挽鞠。

  • 有趣的是要應(yīng)用于數(shù)組元素的函數(shù)疚颊。


我們使用下面的適用()函數(shù)計算所有矩陣中數(shù)組行中元素的總和。

# Create two vectors of different lengths.
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)

# Take these vectors as input to the array.
new.array <- array(c(vector1,vector2),dim = c(3,3,2))
print(new.array)

# Use apply to calculate the sum of the rows across all the matrices.
result <- apply(new.array, c(1), sum)
print(result)

當(dāng)我們執(zhí)行上面的代碼信认,它產(chǎn)生以下結(jié)果 -

, , 1

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15

, , 2

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15

[1] 56 68 60

十七.因子

因子是用于對數(shù)據(jù)進行分類并將其存儲為級別的數(shù)據(jù)對象材义。 它們可以存儲字符串和整數(shù)。 它們在具有有限數(shù)量的唯一值的列中很有用嫁赏。 像“男性”母截,“女性”和True,F(xiàn)alse等橄教。它們在統(tǒng)計建模的數(shù)據(jù)分析中很有用清寇。
使用factor()函數(shù)通過將向量作為輸入創(chuàng)建因子。

# Create a vector as input.
data <- c("East","West","East","North","North","East","West","West","West","East","North")

print(data)
print(is.factor(data))

# Apply the factor function.
factor_data <- factor(data)

print(factor_data)
print(is.factor(factor_data))

當(dāng)我們執(zhí)行上面的代碼护蝶,它產(chǎn)生以下結(jié)果 -

 [1] "East"  "West"  "East"  "North" "North" "East"  "West"  "West"  "West"  "East" "North"
[1] FALSE
 [1] East  West  East  North North East  West  West  West  East  North
Levels: East North West
[1] TRUE

數(shù)據(jù)幀的因子

在創(chuàng)建具有文本數(shù)據(jù)列的任何數(shù)據(jù)框時华烟,R語言將文本列視為分類數(shù)據(jù)并在其上創(chuàng)建因子。

# Create the vectors for data frame.
height <- c(132,151,162,139,166,147,122)
weight <- c(48,49,66,53,67,52,40)
gender <- c("male","male","female","female","male","female","male")

# Create the data frame.
input_data <- data.frame(height,weight,gender)
print(input_data)

# Test if the gender column is a factor.
print(is.factor(input_data$gender))

# Print the gender column so see the levels.
print(input_data$gender)

當(dāng)我們執(zhí)行上面的代碼持灰,它產(chǎn)生以下結(jié)果 -

  height weight gender
1    132     48   male
2    151     49   male
3    162     66 female
4    139     53 female
5    166     67   male
6    147     52 female
7    122     40   male
[1] TRUE
[1] male   male   female female male   female male  
Levels: female male

更改級別順序

可以通過使用新的等級次序再次應(yīng)用因子函數(shù)來改變因子中的等級的順序盔夜。

data <- c("East","West","East","North","North","East","West","West","West","East","North")
# Create the factors
factor_data <- factor(data)
print(factor_data)

# Apply the factor function with required order of the level.
new_order_data <- factor(factor_data,levels = c("East","West","North"))
print(new_order_data)

當(dāng)我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果 -

 [1] East  West  East  North North East  West  West  West  East  North
Levels: East North West
 [1] East  West  East  North North East  West  West  West  East  North
Levels: East West North

生成因子級別

我們可以使用gl()函數(shù)生成因子級別堤魁。 它需要兩個整數(shù)作為輸入喂链,指示每個級別有多少級別和多少次。

語法

gl(n, k, labels)

以下是所使用的參數(shù)的說明 -

  • n是給出級數(shù)的整數(shù)妥泉。

  • k是給出復(fù)制數(shù)目的整數(shù)椭微。

  • labels是所得因子水平的標簽向量。

v <- gl(3, 4, labels = c("Tampa", "Seattle","Boston"))
print(v)

當(dāng)我們執(zhí)行上面的代碼盲链,它產(chǎn)生以下結(jié)果 -

Tampa   Tampa   Tampa   Tampa   Seattle Seattle Seattle Seattle Boston 
[10] Boston  Boston  Boston 
Levels: Tampa Seattle Boston

十八.數(shù)據(jù)幀

數(shù)據(jù)幀是表或二維陣列狀結(jié)構(gòu)蝇率,其中每一列包含一個變量的值迟杂,并且每一行包含來自每一列的一組值。
以下是數(shù)據(jù)幀的特性本慕。

  • 列名稱應(yīng)為非空排拷。
  • 行名稱應(yīng)該是唯一的。
  • 存儲在數(shù)據(jù)幀中的數(shù)據(jù)可以是數(shù)字锅尘,因子或字符類型监氢。
  • 每個列應(yīng)包含相同數(shù)量的數(shù)據(jù)項。

創(chuàng)建數(shù)據(jù)幀

# Create the data frame.
emp.data <- data.frame(
   emp_id = c (1:5), 
   emp_name = c("Rick","Dan","Michelle","Ryan","Gary"),
   salary = c(623.3,515.2,611.0,729.0,843.25), 
   
   start_date = as.Date(c("2012-01-01", "2013-09-23", "2014-11-15", "2014-05-11",
      "2015-03-27")),
   stringsAsFactors = FALSE
)
# Print the data frame.         
print(emp.data) 

當(dāng)我們執(zhí)行上面的代碼藤违,它產(chǎn)生以下結(jié)果 -

 emp_id    emp_name     salary     start_date
1     1     Rick        623.30     2012-01-01
2     2     Dan         515.20     2013-09-23
3     3     Michelle    611.00     2014-11-15
4     4     Ryan        729.00     2014-05-11
5     5     Gary        843.25     2015-03-27

獲取數(shù)據(jù)幀的結(jié)構(gòu)

通過使用str()函數(shù)可以看到數(shù)據(jù)幀的結(jié)構(gòu)忙菠。

# Create the data frame.
emp.data <- data.frame(
   emp_id = c (1:5), 
   emp_name = c("Rick","Dan","Michelle","Ryan","Gary"),
   salary = c(623.3,515.2,611.0,729.0,843.25), 
   
   start_date = as.Date(c("2012-01-01", "2013-09-23", "2014-11-15", "2014-05-11",
      "2015-03-27")),
   stringsAsFactors = FALSE
)
# Get the structure of the data frame.
str(emp.data)

當(dāng)我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果 -

'data.frame':   5 obs. of  4 variables:
 $ emp_id    : int  1 2 3 4 5
 $ emp_name  : chr  "Rick" "Dan" "Michelle" "Ryan" ...
 $ salary    : num  623 515 611 729 843
 $ start_date: Date, format: "2012-01-01" "2013-09-23" "2014-11-15" "2014-05-11" ...

數(shù)據(jù)框中的數(shù)據(jù)摘要

可以通過應(yīng)用summary()函數(shù)獲取數(shù)據(jù)的統(tǒng)計摘要和性質(zhì)纺弊。

# Create the data frame.
emp.data <- data.frame(
   emp_id = c (1:5), 
   emp_name = c("Rick","Dan","Michelle","Ryan","Gary"),
   salary = c(623.3,515.2,611.0,729.0,843.25), 
   
   start_date = as.Date(c("2012-01-01", "2013-09-23", "2014-11-15", "2014-05-11",
      "2015-03-27")),
   stringsAsFactors = FALSE
)
# Print the summary.
print(summary(emp.data))  

當(dāng)我們執(zhí)行上面的代碼牛欢,它產(chǎn)生以下結(jié)果 -

     emp_id    emp_name             salary        start_date        
 Min.   :1   Length:5           Min.   :515.2   Min.   :2012-01-01  
 1st Qu.:2   Class :character   1st Qu.:611.0   1st Qu.:2013-09-23  
 Median :3   Mode  :character   Median :623.3   Median :2014-05-11  
 Mean   :3                      Mean   :664.4   Mean   :2014-01-14  
 3rd Qu.:4                      3rd Qu.:729.0   3rd Qu.:2014-11-15  
 Max.   :5                      Max.   :843.2   Max.   :2015-03-27 

從數(shù)據(jù)幀提取數(shù)據(jù)

使用列名稱從數(shù)據(jù)框中提取特定列。

# Create the data frame.
emp.data <- data.frame(
   emp_id = c (1:5),
   emp_name = c("Rick","Dan","Michelle","Ryan","Gary"),
   salary = c(623.3,515.2,611.0,729.0,843.25),
   
   start_date = as.Date(c("2012-01-01","2013-09-23","2014-11-15","2014-05-11",
      "2015-03-27")),
   stringsAsFactors = FALSE
)
# Extract Specific columns.
result <- data.frame(emp.data$emp_name,emp.data$salary)
print(result)

當(dāng)我們執(zhí)行上面的代碼淆游,它產(chǎn)生以下結(jié)果 -

  emp.data.emp_name emp.data.salary
1              Rick          623.30
2               Dan          515.20
3          Michelle          611.00
4              Ryan          729.00
5              Gary          843.25

先提取前兩行傍睹,然后提取所有列

# Create the data frame.
emp.data <- data.frame(
   emp_id = c (1:5),
   emp_name = c("Rick","Dan","Michelle","Ryan","Gary"),
   salary = c(623.3,515.2,611.0,729.0,843.25),
   
   start_date = as.Date(c("2012-01-01", "2013-09-23", "2014-11-15", "2014-05-11",
      "2015-03-27")),
   stringsAsFactors = FALSE
)
# Extract first two rows.
result <- emp.data[1:2,]
print(result)

當(dāng)我們執(zhí)行上面的代碼,它產(chǎn)生以下結(jié)果 -

  emp_id    emp_name   salary    start_date
1      1     Rick      623.3     2012-01-01
2      2     Dan       515.2     2013-09-23

用第2和第4列提取第3和第5行

# Create the data frame.
emp.data <- data.frame(
   emp_id = c (1:5), 
   emp_name = c("Rick","Dan","Michelle","Ryan","Gary"),
   salary = c(623.3,515.2,611.0,729.0,843.25), 
   
    start_date = as.Date(c("2012-01-01", "2013-09-23", "2014-11-15", "2014-05-11",
      "2015-03-27")),
   stringsAsFactors = FALSE
)

# Extract 3rd and 5th row with 2nd and 4th column.
result <- emp.data[c(3,5),c(2,4)]
print(result)

當(dāng)我們執(zhí)行上面的代碼犹菱,它產(chǎn)生以下結(jié)果 -

  emp_name start_date
3 Michelle 2014-11-15
5     Gary 2015-03-27

擴展數(shù)據(jù)幀

可以通過添加列和行來擴展數(shù)據(jù)幀拾稳。

添加列

只需使用新的列名稱添加列向量。

# Create the data frame.
emp.data <- data.frame(
   emp_id = c (1:5), 
   emp_name = c("Rick","Dan","Michelle","Ryan","Gary"),
   salary = c(623.3,515.2,611.0,729.0,843.25), 
   
   start_date = as.Date(c("2012-01-01", "2013-09-23", "2014-11-15", "2014-05-11",
      "2015-03-27")),
   stringsAsFactors = FALSE
)

# Add the "dept" coulmn.
emp.data$dept <- c("IT","Operations","IT","HR","Finance")
v <- emp.data
print(v)

當(dāng)我們執(zhí)行上面的代碼腊脱,它產(chǎn)生以下結(jié)果 -

  emp_id   emp_name    salary    start_date       dept
1     1    Rick        623.30    2012-01-01       IT
2     2    Dan         515.20    2013-09-23       Operations
3     3    Michelle    611.00    2014-11-15       IT
4     4    Ryan        729.00    2014-05-11       HR
5     5    Gary        843.25    2015-03-27       Finance

添加行

要將更多行永久添加到現(xiàn)有數(shù)據(jù)幀访得,我們需要引入與現(xiàn)有數(shù)據(jù)幀相同結(jié)構(gòu)的新行,并使用rbind()函數(shù)陕凹。
在下面的示例中悍抑,我們創(chuàng)建一個包含新行的數(shù)據(jù)幀,并將其與現(xiàn)有數(shù)據(jù)幀合并以創(chuàng)建最終數(shù)據(jù)幀杜耙。

# Create the first data frame.
emp.data <- data.frame(
   emp_id = c (1:5), 
   emp_name = c("Rick","Dan","Michelle","Ryan","Gary"),
   salary = c(623.3,515.2,611.0,729.0,843.25), 
   
   start_date = as.Date(c("2012-01-01", "2013-09-23", "2014-11-15", "2014-05-11",
      "2015-03-27")),
   dept = c("IT","Operations","IT","HR","Finance"),
   stringsAsFactors = FALSE
)

# Create the second data frame
emp.newdata <-  data.frame(
   emp_id = c (6:8), 
   emp_name = c("Rasmi","Pranab","Tusar"),
   salary = c(578.0,722.5,632.8), 
   start_date = as.Date(c("2013-05-21","2013-07-30","2014-06-17")),
   dept = c("IT","Operations","Fianance"),
   stringsAsFactors = FALSE
)

# Bind the two data frames.
emp.finaldata <- rbind(emp.data,emp.newdata)
print(emp.finaldata)

當(dāng)我們執(zhí)行上面的代碼搜骡,它產(chǎn)生以下結(jié)果 -

  emp_id     emp_name    salary     start_date       dept
1      1     Rick        623.30     2012-01-01       IT
2      2     Dan         515.20     2013-09-23       Operations
3      3     Michelle    611.00     2014-11-15       IT
4      4     Ryan        729.00     2014-05-11       HR
5      5     Gary        843.25     2015-03-27       Finance
6      6     Rasmi       578.00     2013-05-21       IT
7      7     Pranab      722.50     2013-07-30       Operations
8      8     Tusar       632.80     2014-06-17       Fianance

下一篇:R語言——進階篇

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市佑女,隨后出現(xiàn)的幾起案子记靡,更是在濱河造成了極大的恐慌,老刑警劉巖团驱,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摸吠,死亡現(xiàn)場離奇詭異,居然都是意外死亡嚎花,警方通過查閱死者的電腦和手機寸痢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贩幻,“玉大人轿腺,你說我怎么就攤上這事两嘴〈猿” “怎么了族壳?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長趣些。 經(jīng)常有香客問我仿荆,道長,這世上最難降的妖魔是什么坏平? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任拢操,我火速辦了婚禮,結(jié)果婚禮上舶替,老公的妹妹穿的比我還像新娘令境。我一直安慰自己,他們只是感情好顾瞪,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布舔庶。 她就那樣靜靜地躺著,像睡著了一般陈醒。 火紅的嫁衣襯著肌膚如雪惕橙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天钉跷,我揣著相機與錄音弥鹦,去河邊找鬼。 笑死爷辙,一個胖子當(dāng)著我的面吹牛彬坏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播膝晾,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼苍鲜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了玷犹?” 一聲冷哼從身側(cè)響起混滔,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎歹颓,沒想到半個月后坯屿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡巍扛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年领跛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撤奸。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡吠昭,死狀恐怖喊括,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情矢棚,我是刑警寧澤郑什,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站蒲肋,受9級特大地震影響蘑拯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兜粘,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一申窘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧孔轴,春花似錦剃法、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至悍引,卻和暖如春恩脂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背趣斤。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工俩块, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浓领。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓玉凯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親联贩。 傳聞我的和親對象是個殘疾皇子漫仆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容