R語言——獲取數據1

參考資料:學習R

? ? ? ? 數據的來源可以由很多。R內置有許多數據集,而在其他的附件包中能找到更多的數據。R能從各式各樣的來源中讀取,且支持大量的文件格式。

1、內置的數據集

? ? ? ? R的基本分發包有一個datasets,里面全是示例數據集。很多其他包也含有數據集。使用data函數可以查看所有我們已成功加載了的包的數據集:

? ? ? ? 如果需要更完整的列表,包括已安裝的所有包的數據,可以使用

data(package=.packages(TRUE))

? ? ? ? 如果我們想訪問任意數據集里的數據,只需調用data函數,傳入數據集的名稱及其所在的包名(如果此包已經加載,可省略這個packages參數)

data("kidney",package="survival")

2、讀取文本文件

? ? ? ? 有眾多的格式和文本文件標準可用于存儲數據。用于存儲數據的通用格式為分隔符(即CSV或制表符分隔文件)、可擴展標記語言(XML)、JavaScript對象表示法(JSON)和YAML。

? ? ? ? 將數據存儲在文本文件中的主要優點是:它們可被幾乎所有的其他數據分析軟件讀取

(1)CSV和制表符分隔(Tab-Delimited)文件

????????矩形(類似電子表格的) 數據通常存儲在帶有分隔符的文件中, 特別是逗號分隔值(CSV)和制表符分隔值文件。read.table函數將讀取這些分隔符文件,并將結果存儲在一個數據框中

????????RedDeerEndocranialVolume.dlm 是一個以空格符分隔的文件, 它包含了一些使用不同技術
測量得到的馬鹿的顱容積數據。數據文件可以在 learningr 包的extdata文件夾中找到。該數據有標題行,所以我們需要給read.table傳遞參數header=TRUE。因為并不是每次都會進行二次測量,所以不是所有行都是完整的。給read.table傳遞參數fill=TRUE會使用NA值來代替那些缺失的域。下例中的system.file函數用于定位包中的文件。

install.packages("learningr")
library(learningr)
deer_file<-system.file("extdata","RedDeerEndocranialVolume.dlm",package="learningr"
)
deer_data<-read.table(deer_file,header=TRUE,fill=TRUE)
str(deer_data,vec.len=1)

????????注意, 每個列的類已自動確定, 行和列的名字也已自動分配。 列名( 默認情況下) 必須是有效的變量名(通過使用 make.names), 如果不提供行名那么行將就會按 1、 2、 3 編號,以此類推。

? ? ? ? 有很多參數可以用來指定如何讀取該文件,其中最重要的是sep參數,它決定了使用哪個字符作為字段之間的分隔符。nrow可以指定讀取數據的行數,而skip決定跳過文件開始的多少行。更多高級選項包括:覆蓋默認的行名、列名和類,指定輸入文字的字符編碼,以及輸入的字符串格式的列如何聲明。

? ? ? ? 有幾個read.table的包裝函數使用起來比較方便。read.csv分隔符默認設置為逗號,并假設數據有標題行。read.csv2使用逗號作為小數位,并用分號作為分隔符。read.delim和read.delim2將分別使用句號和逗號作為小數位來導入制表符分隔的文件。

? ? ? ? 在上圖這種情況,我們不能僅調用read.csv就把所有東西都讀出來,因為不同的數據塊中所含有的字段數量不同,而且每個字段也確實不同。我們需要使用read.csv中的skip和nrow參數指定要讀取文件中的哪些位置:

crab_file<-system.file("extdata","crabtag.csv",package="learningr"
)
crab_id_block<-read.csv(crab_file,header=FALSE,skip=3,nrow=2
)
print(crab_id_block)
crab_lifetiem_notebook<-read.csv(crab_file,header=FALSE,skip=8,nrow=5
)
print(crab_lifetiem_notebook)

? ? ? ?如果我們的數據是從另一種語言中導入的,那么可能需要把na.strings參數傳遞給read.table。對于SQL導出的數據,則使用na.string="NULL"。對于SAS或Stata導出的數據,則需要使用na.strings="."。從Excel中導出的數據,使用na.string=c("","#N/A","#DIV/0!","#NUM")。

? ? ? ? 寫入文件通常比讀取文件要簡單,因為我們無需擔心讀取文件時出現各種問題。很顯然,write.table和write.csv分別對應著read.table和read.csv的讀操作。這兩個函數都需要一個數據框和寫入文件的路徑作為參數

write.csv(crab_id_block,"Data/Cleaned/id_block_data.csv",row.names=FALSE,fileEncoding = "utf8"
)

(2)非結構化文本文件

? ? ? ? 不是所有的文本文件都像都像定界符文件那樣有一個定義良好的而結構。如果文件的結構松散,更簡單的做法是:先讀入文件中的所有文本行,再對其內容進行分析或操作。readLines就提供了這種方法。它接受一個文件路徑(或文件連接)和一個可選的最大行數作為參數來讀取文件

text_file<-system.file("extdata","Shakespeare's The Tempest, from Project Gutenberg pg2235.txt",package="learningr"
)
the_tempest<-readLines(text_file)
the_tempest[19:20]
help(readLines)

? ? ? ? writeLines用于執行與readLines相反的操作。它寫入文件時需要一個字符向量和文件作為輸入參數:

writeLines(rev(text_file),  # rev執行向量的反操作"name.txt"
)

(3)XML和HTML文件

? ? ? ? 當我們導入一個XML文件時,XML包(需安裝并加載)將提供兩種選擇以存儲結果:利用內部節點,或使用R節點。通常,我們應該使用內部節點來存儲,因為這樣我們能使用XPath來查詢節點樹。

? ? ? ? 有幾個函數可以用于導入XML數據,如xmlParse:

library(XML)
xml_file<-system.file("extdata","options.xml",package="learningr"
)
r_options<-xmlParse(xml_file)

? ? ? ? 如上圖所示,使用內部節點的問題是:str和head等匯總函數不能和它們一起使用。要使用R級的節點,需設置useInternalNodes=FALSE(或使用xmlTreeParse,它會默認設置此項屬性)

xmlParse(xml_file,useInternalNodes = FALSE)
xmlTreeParse(xml_file)

? ? ? ? XPath是一種用于查詢XML文檔的語言,它能基于某些過濾規則尋找相應的節點。下例中,我們將在文檔//中尋找命名為variable的節點,此節點[]的name屬性@包含contains了warn字符串。

library(XML)
xml_file<-system.file("extdata","options.xml",package="learningr"
)
r_options<-xmlParse(xml_file)
xpathSApply(r_options,"//variable[contains(@name,'warn')]")

? ? ? ? 這種查詢在提取網頁數據中非常有用。htmlParse和htmlTreeParse是用于HTML頁面導入的函數。

(4)JSON和YAML文件

????????XML 的主要問題是它太冗長了,且你需要顯式地指定數據的類型(它在默認情況下不能區分字符串和數字),這就使得它更冗長了。如果文件大小很重要(例如,當你要在網絡上傳輸大量數據集時),信息過于冗余就成了問題。于是,有人發明了YAML和它的子集JSON來解決這些問題。它們特別適合于通過網絡傳輸大量數據集,尤其是數字數據和數組。JSON是Web應用程序彼此之間傳遞數據的事實標準。

????????有兩個包可用于處理JSON數據:RJSONIO和rjson。在讀入不正確的JSON時,RJSONIO一般比rjson更寬容。在這兩個包中讀取和寫入JSON數據的函數名基本相同,所以很容易在它們之間
換。在下例中,雙冒號 :: 用于把相同名字的函數從不同的包中分別出來(如果只加載兩個包中的一個, 就不需要雙冒號)。

install.packages(c("RJSONIO","rjson"))
library(RJSONIO)
library(rjson)
jamaican_city_file<-system.file("extdata","Jamaican Cities.json",package="learningr"
)
jamaican_ctiy_RJSONIO<-rjson::fromJSON(jamaican_city_file)
print(jamaican_ctiy_RJSONIO)

????????JSON的規范不允許無窮值或 NaN 值,而且它對缺失數的定義比較模糊。這兩個包處理這些值的方式有所不同:RJSONIO 把 NaN 和 NA 映射為 JSON 的 null,但保留正負無窮;而 rjson 會把所有這些值都轉換為字符串。

special_numbers<-c(NaN,NA,Inf,-Inf)
RJSONIO::toJSON(special_numbers)
rjson::toJSON(special_numbers)

????????因為這兩種方法都用于處理備受限制的JSON規范,所以如果你發現需要大量地處理這些特殊數字類型(或想在你的數據對象中加些評論),那么最好還是使用YAML。在yaml包中有兩個函數能導入YAML數據:yaml.load接受一個YAML的字符串,并將其轉換為一個R對象;yaml.load_file 也一樣,不過它把輸入的字符串作為包含 YAML 文件的路徑處理。這里不再展示。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76404.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76404.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76404.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HTTP 請求方法

HTTP 請求方法 引言 HTTP(超文本傳輸協議)是互聯網上應用最為廣泛的網絡協議之一。它定義了客戶端與服務器之間通信的規則。HTTP請求方法,也稱為HTTP動詞,是客戶端向服務器發送請求時使用的操作類型。本文將詳細介紹HTTP請求方法的概念、分類、常用方法及其在實際應用中的…

python函數裝飾器

python函數裝飾器 聲明&#xff1a;博主并沒有系統學習過python語言&#xff0c;在實際項目中遇到關于python不懂的語法&#xff0c;這里僅作為個人學習積累筆記 1.1 python函數相關基礎 深入了解python函數裝飾器移步&#xff1a;Python 函數裝飾器 下面的筆記來源于上述鏈接…

OpenCV 圖形API(7)用于將笛卡爾坐標(x, y)轉換為極坐標(magnitude, angle)函數cartToPolar()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 計算二維向量的大小和角度。 cartToPolar 函數計算每個二維向量 (x(I), y(I)) 的大小、角度&#xff0c;或同時計算兩者&#xff1a; magnitude…

什么是向量搜索Vector Search?

&#x1f9e0; 向所有學習者致敬&#xff01; “學習不是裝滿一桶水&#xff0c;而是點燃一把火。” —— 葉芝 我的博客主頁&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 歡迎點擊加入AI人工智能社區&#xff01; &#x1f680; 讓我們一起努力&#xff0c;共創…

搜索工具Everything下載安裝使用教程(附安裝包)

文章目錄 前言一、搜索工具Everything介紹二、搜索工具Everything使用步驟1.軟件下載2.版本選取3.啟動軟件4.文件搜索 前言 本教程將詳細為您介紹 Everything 的下載、安裝與使用方法&#xff0c;助您快速上手&#xff0c;充分利用這款工具的強大功能&#xff0c;告別文件查找…

element-plus中,Upload上傳組件的使用 + 后端處理

目錄 一. 案例一&#xff1a;用戶更換個人頭像 1.前端實現 2.后端實現 ①引入阿里云oss的依賴 ②編寫AliOSSUtils工具類 ③編寫controller層 ④編寫service層 ⑤編寫mapper層 3.效果展示 4.重點理解 結語 一. 案例一&#xff1a;用戶更換個人頭像 1.前端實現 <…

HarmonyOS-ArkUI Rcp模塊類關系梳理

前言 本文重點解決的是&#xff0c;按照官網學習路徑學習Tcp模塊內容時&#xff0c;越看越混亂的問題。仿照官網案例&#xff0c;書寫代碼時&#xff0c;產生的各種疑惑。比如&#xff0c;類與類之間的關系&#xff0c;各種配置信息究竟有多少&#xff0c;為什么越寫越混亂。那…

【云計算物理網絡】數據中心網絡架構設計

云計算的物理基礎&#xff1a;數據中心網絡架構設計 一、技術背景&#xff1a;從“三層架構”到“云原生網絡”二、技術特點&#xff1a;云數據中心網絡的四大支柱三、技術細節&#xff1a;CLOS架構的實現挑戰四、未來方向&#xff1a;從“連接設備”到“感知服務”結語&#x…

window11 通過cmd命令行安裝 oh my zsh 的教程

步驟 1&#xff1a;安裝 WSL 2 和 Ubuntu 1. 以管理員身份打開 CMD wsl --install -d Ubuntu此命令會自動安裝 WSL 2 和 Ubuntu 發行版。 安裝完成后重啟系統。 初始化 Ubuntu 在開始菜單中打開 Ubuntu&#xff0c;設置用戶名和密碼。 步驟 2&#xff1a;在 WSL 的 Ubunt…

gdb 調試命令記錄

啟動調試 gdb ./待調試的程序 #不帶參數 (gdb) run #帶參數 gdb --args ./your_program arg1 arg2 arg3 (gdb) run arg1 arg2 arg3 #圖形化代碼界面 (gdb) layout src基礎調試命令 命令縮寫作用run [args]r運行程序&#xff08;可帶命令行參數&#xff09;break <locatio…

STM32F103低功耗模式深度解析:從理論到應用實踐(上) | 零基礎入門STM32第九十二步

主題內容教學目的/擴展視頻低功耗模式什么是低功耗&#xff0c;模式介紹&#xff0c;切換方法。為電池設備開發做準備。 師從洋桃電子&#xff0c;杜洋老師 &#x1f4d1;文章目錄 一、低功耗模式概述1.1 為什么需要低功耗模式&#xff1f;1.2 基本實現原理 二、低功耗模式的本…

JavaScript instanceof 運算符全解析

JavaScript instanceof 運算符全解析 核心語義: 判斷一個對象(object)是否屬于某個構造函數(constructor)或類的實例,基于原型鏈(prototype chain)實現類型檢測。 一、JavaScript 中的基礎用法 1. 語法結構 object instanceof constructor 返回值:布爾值(true/fal…

電腦基礎之word基礎操作

word是常用的辦公軟件之一&#xff0c;用于文檔編輯&#xff0c;如合同/報告撰寫、論文等?。 一、簡介 word文檔最早由微軟推出&#xff0c;通過Microsoft Office Word軟件創建和編輯。由于涉及版權付費問題&#xff0c;大多數個人使用盜版軟件。后來金山出了WPS office免費軟…

深度解析Python代碼中的廣告信息提取與JSON處理

哈嘍,大家好,我是木頭左! 在當今數字化時代,廣告無處不在,而從廣告中提取關鍵信息并進行處理則成為了一項重要的技能。本文將深入剖析一段Python代碼,該代碼旨在從給定的JSON格式字符串中提取廣告相關信息,并對其進行解析和處理。通過這段代碼,將展示如何運用Python的j…

base64在線解碼工具

我們經常會用到base64編碼&#xff0c;相應的base64解碼成為日常必備&#xff0c;所有我們需要擁有一個base64在線解碼工具 base64在線解碼工具

Linux——進程信號(3)(信號保存與信號捕捉)

進程信號3 信號保存信號相關概念詳解信號集&#xff08;sigset_t&#xff09;及操作函數詳解 信號捕捉信號捕捉的詳細流程解析信號捕捉的核心概念信號捕捉的完整流程&#xff08;以 SIGQUIT 為例&#xff09; 信號保存 信號相關概念詳解 1.核心概念 (1) 信號遞達&#xff08…

批量在 txt 記事本文件的指定位置插入行,如在最末尾位置插入行

我們在網上下載的小說經常可以看到內容中每隔多少行都會現一些網站名稱和聯系方式等廣告信息&#xff0c;這些都是固定或者隨機插入在小說正文中的。那是怎么樣實現在文本文件中指定位置插入這些行的呢&#xff1f;今天就給大家介紹一下如何在 txt 記事本文件或者其它類型的文本…

python的內存管理機制

目錄 內存分配方式自動內存管理內存分配策略 垃圾回收機制引用計數垃圾回收對象創建和引用關系引用計數的狀態刪除變量 標記 - 清除垃圾回收 內存分配的區域劃分棧內存堆內存 內存管理的優化內存池技術對象共享 Python 的內存管理機制是其運行效率和安全性的重要保障&#xff0…

火山引擎coze用戶市場

火山引擎 **Coze**&#xff08;扣子&#xff09;的用戶市場主要集中在 **需要快速構建和部署智能對話應用的企業及開發者群體**&#xff0c;覆蓋多個行業與場景。以下是具體分析&#xff1a; --- ### **一、核心用戶群體** 1. **企業用戶** - **互聯網/科技公司**&#…

Java 責任鏈模式 詳解

責任鏈模式詳解 一、責任鏈模式概述 責任鏈模式(Chain of Responsibility Pattern)是一種行為型設計模式&#xff0c;它允許你將請求沿著處理鏈傳遞&#xff0c;直到有一個處理者能夠處理它為止。這種模式解耦了請求的發送者和接收者&#xff0c;使多個對象都有機會處理請求。…