R语言入门学习教程,从入门到精通,R语言获取数据 (7)

R语言获取数据


一、手动输入数据

1. 数据编辑器(Edit 方式)

函数edit()data.entry()

案例代码

r 复制代码
# 创建一个空的数据框
my_data <- data.frame()

# 打开数据编辑器手动输入数据(Windows/Linux GUI环境中有效)
# 注意:在RStudio中可能不弹出编辑器窗口,建议使用R原生环境
my_edited_data <- edit(my_data)
print(my_edited_data)

# 使用 data.entry() 函数(功能类似)
# data.entry(my_data)

# 在现代RStudio中,推荐使用以下方式
# 创建一个带有列名的空数据框
student_data <- data.frame(
  name = character(),
  age = numeric(),
  score = numeric(),
  stringsAsFactors = FALSE
)

# 使用 fix() 函数直接编辑
# fix(student_data)  # 会弹出编辑器窗口

2. 在代码中直接输入数据

常用函数c()data.frame()matrix()list()

案例代码

r 复制代码
# 使用 c() 函数创建向量
# 创建学生成绩向量
student_scores <- c(85, 92, 78, 88, 96)
print(student_scores)

# 使用 data.frame() 创建数据框
# 创建学生信息数据框
students <- data.frame(
  name = c("张三", "李四", "王五", "赵六"),      # 姓名列
  age = c(20, 21, 19, 22),                      # 年龄列
  score = c(85, 92, 78, 88),                    # 成绩列
  stringsAsFactors = FALSE                      # 不转换为因子
)
print(students)

# 使用 matrix() 创建矩阵
# 创建3行2列的矩阵,按列填充
my_matrix <- matrix(
  data = 1:6,           # 数据:1到6
  nrow = 3,             # 3行
  ncol = 2,             # 2列
  byrow = FALSE,        # 按列填充
  dimnames = list(      # 行列名称
    c("行1", "行2", "行3"),
    c("列A", "列B")
  )
)
print(my_matrix)

# 使用 list() 创建列表
# 可以包含不同类型的数据
my_list <- list(
  name = "数据分析",
  data = c(10, 20, 30),
  matrix = matrix(1:4, 2, 2),
  flag = TRUE
)
print(my_list)

二、读取外部数据

1. 读取文本文件、CSV文件

1.1 读取CSV文件

主要函数read.csv()read.table()

案例代码

r 复制代码
# 方式1:使用 read.csv() 读取CSV文件
# 参数说明:
# - file: 文件路径
# - header: 是否将第一行作为列名
# - sep: 分隔符(CSV默认逗号)
# - stringsAsFactors: 是否将字符转为因子
# - na.strings: 指定缺失值的表示方式
# - encoding: 文件编码

# 读取CSV文件的基本用法
csv_data <- read.csv(
  file = "data.csv",                    # 文件名或路径
  header = TRUE,                        # 第一行作为列名
  stringsAsFactors = FALSE,             # 不转换字符为因子
  na.strings = c("NA", "", "NULL"),     # 缺失值标记
  encoding = "UTF-8"                    # 文件编码
)
print(head(csv_data))                   # 查看前6行

# 方式2:使用 read.table() 读取各种文本文件
# 适用性更广,可以指定不同的分隔符
table_data <- read.table(
  file = "data.txt",                    # 文件名
  header = TRUE,                        # 是否有表头
  sep = "\t",                           # 制表符分隔
  quote = "\"",                         # 引用符号
  dec = ".",                            # 小数点符号
  row.names = 1,                        # 指定第1列为行名
  skip = 0,                             # 跳过前0行
  nrows = 100                           # 只读取100行
)

# 读取无表头的文件
no_header_data <- read.csv(
  "data_no_header.csv",
  header = FALSE,                       # 无表头
  col.names = c("col1", "col2", "col3") # 手动指定列名
)

# 处理大文件时的优化选项
large_data <- read.csv(
  "large_file.csv",
  nrows = 1000,                         # 只读前1000行进行测试
  colClasses = c("numeric", "character", "Date"), # 指定列类型加快速度
  comment.char = "#"                    # 跳过注释行
)

# 读取网络上的CSV文件
url_data <- read.csv(
  "https://people.sc.fsu.edu/~jburkardt/data/csv/hw_200.csv"
)
print(head(url_data))
1.2 读取文本文件

案例代码

r 复制代码
# 读取普通文本文件(每行为一个字符串)
# 使用 readLines() 函数
text_lines <- readLines(
  con = "data.txt",          # 文件路径
  n = -1,                    # 读取所有行(-1表示全部)
  encoding = "UTF-8"         # 编码
)
print(text_lines[1:5])       # 显示前5行

# 读取固定宽度格式的文件
# 使用 read.fwf() 函数
fwf_data <- read.fwf(
  file = "fixed_width.txt",
  widths = c(10, 8, 5),      # 每列的宽度
  col.names = c("ID", "Name", "Score"),
  header = FALSE
)
print(fwf_data)

# 写入CSV文件示例(用于后续读取测试)
# 创建示例数据
sample_data <- data.frame(
  ID = 1:5,
  Name = c("A", "B", "C", "D", "E"),
  Score = c(85, 92, 78, 88, 96)
)

# 写入CSV文件
write.csv(sample_data, "sample_output.csv", row.names = FALSE)

2. 读取Excel文件

需要的包readxlopenxlsxxlsx

安装和加载

r 复制代码
# 安装包(如未安装)
# install.packages("readxl")
# install.packages("openxlsx")
# install.packages("xlsx")

# 加载包
library(readxl)
library(openxlsx)

案例代码(使用 readxl)

r 复制代码
# readxl 包的特点:不需要Java环境,速度快,最常用

# 1. 查看Excel文件中的所有工作表名称
sheet_names <- excel_sheets("data.xlsx")
print(sheet_names)

# 2. 读取Excel文件(默认第一个工作表)
excel_data <- read_excel(
  path = "data.xlsx",               # 文件路径
  sheet = 1,                        # 可以是位置(1)或名称("Sheet1")
  col_names = TRUE,                 # 第一行作为列名
  skip = 0,                         # 跳过的行数
  n_max = Inf,                      # 读取的最大行数
  na = c("", "NA", "NULL")          # 缺失值标记
)
print(head(excel_data))

# 3. 读取指定的工作表
sheet2_data <- read_excel("data.xlsx", sheet = "Sheet2")

# 4. 指定列类型读取
# 使用col_types参数指定每列的类型
typed_data <- read_excel(
  "data.xlsx",
  col_types = c("text", "numeric", "date", "skip")  # skip表示跳过该列
)

# 5. 读取指定范围
range_data <- read_excel(
  "data.xlsx",
  range = "A1:E100",                # 只读取A1到E100区域
  sheet = "Sheet1"
)

# 6. 处理大型Excel文件(逐块读取)
# 定义块大小
chunk_size <- 1000
# 计算总行数(需要先快速扫描)
# total_rows <- length(read_excel("large.xlsx", range = cell_rows(1))) 
# 分块读取示例(实际使用时取消注释)
# for(i in seq(1, total_rows, chunk_size)) {
#   chunk <- read_excel("large.xlsx", range = cell_rows(c(i, i+chunk_size-1)))
#   # 处理每个块
# }

案例代码(使用 openxlsx)

r 复制代码
library(openxlsx)

# 1. 读取Excel文件
ox_data <- read.xlsx(
  xlsxFile = "data.xlsx",           # 文件路径
  sheet = 1,                        # 工作表索引或名称
  startRow = 1,                     # 开始行
  colNames = TRUE,                  # 是否包含列名
  rowNames = FALSE,                 # 是否包含行名
  detectDates = TRUE                # 自动检测日期
)

# 2. 读取所有工作表
all_sheets <- getSheetNames("data.xlsx")
all_data <- list()
for(sheet_name in all_sheets) {
  all_data[[sheet_name]] <- read.xlsx("data.xlsx", sheet = sheet_name)
}

# 3. 读取指定行列范围
range_ox_data <- read.xlsx(
  "data.xlsx",
  rows = c(1, 100),                 # 1到100行
  cols = c(1, 5)                    # 1到5列
)

3. 读取SPSS文件

需要的包havenforeign

案例代码

r 复制代码
# 安装并加载haven包(推荐,更新、更好用)
# install.packages("haven")
library(haven)

# 1. 读取SPSS文件(.sav格式)
spss_data <- read_sav(
  file = "data.sav",                # SPSS文件路径
  user_na = FALSE                   # 是否处理用户定义的缺失值
)
print(head(spss_data))

# 2. 查看数据信息
print(str(spss_data))               # 查看数据结构
print(attributes(spss_data))        # 查看属性(包括标签)

# 3. 提取变量标签
var_labels <- lapply(spss_data, function(x) attr(x, "label"))
print(var_labels)

# 4. 使用foreign包读取(备选方法)
library(foreign)
spss_data_foreign <- read.spss(
  file = "data.sav",
  use.value.labels = TRUE,          # 使用值标签
  to.data.frame = TRUE              # 直接返回数据框
)

# 5. 读取压缩的SPSS文件(.zsav格式,需要haven 2.0+)
# spss_zdata <- read_sav("data.zsav")

# 6. 处理中文编码问题
# 如果遇到编码问题,先设置区域
# Sys.setlocale("LC_CTYPE", "chinese")
# spss_data_cn <- read_sav("chinese_data.sav")

4. 读取Stata文件

需要的包haven

案例代码

r 复制代码
library(haven)

# 1. 读取Stata文件(.dta格式)
stata_data <- read_dta(
  file = "data.dta"                 # Stata文件路径
)
print(head(stata_data))

# 2. 读取Stata 13及以后版本的文件
stata13_data <- read_dta("data13.dta")

# 3. 读取时指定编码
stata_cn_data <- read_dta(
  "chinese_data.dta",
  encoding = "UTF-8"                # 指定编码
)

# 4. 查看变量标签
var_labels <- lapply(stata_data, function(x) attr(x, "label"))
print("变量标签:")
print(var_labels)

# 5. 保留值标签信息
# haven会自动导入值标签作为factor类型
# 查看因子变量的水平
if(is.factor(stata_data$some_var)) {
  print(levels(stata_data$some_var))
}

# 6. 使用foreign包作为备选
library(foreign)
stata_foreign <- read.dta(
  "data.dta",
  convert.dates = TRUE,             # 转换日期
  convert.factors = TRUE            # 转换因子
)

5. 读取SAS文件

需要的包havensas7bdat

案例代码

r 复制代码
library(haven)

# 1. 使用haven读取SAS文件(.sas7bdat格式)
sas_data <- read_sas(
  file = "data.sas7bdat"            # SAS数据集文件
)
print(head(sas_data))

# 2. 读取SAS目录中的多个文件
# sas_catalog <- read_sas("catalog.sas7bcat")  # 较少使用

# 3. 使用sas7bdat包(备选)
# install.packages("sas7bdat")
library(sas7bdat)
sas_data_alt <- read.sas7bdat(
  "data.sas7bdat",
  debug = FALSE,                    # 是否显示调试信息
  col.names = TRUE                  # 是否读取列名
)

# 4. 处理SAS格式文件中的缺失值
sas_data <- read_sas("data.sas7bdat")
# SAS中的特殊缺失值(.a, .b等)会被转换为NA

# 5. 查看SAS数据集的元数据
print(names(sas_data))              # 变量名
print(dim(sas_data))                # 维度
print(sapply(sas_data, class))      # 各列类型

6. 导入数据库中的数据

需要的包RSQLiteRMySQLRODBCDBI

案例代码(SQLite)

r 复制代码
# 安装并加载包
# install.packages("RSQLite")
# install.packages("DBI")
library(RSQLite)
library(DBI)

# 1. 连接到SQLite数据库
# 创建数据库连接(如果文件不存在会自动创建)
con <- dbConnect(
  drv = SQLite(),                   # 驱动
  dbname = "my_database.sqlite"     # 数据库文件
)

# 2. 写入示例数据到数据库
# 创建示例数据框
sample_df <- data.frame(
  id = 1:10,
  name = paste0("Person", 1:10),
  age = round(runif(10, 18, 60)),
  score = round(runif(10, 60, 100))
)

# 将数据框写入数据库表
dbWriteTable(con, "students", sample_df, overwrite = TRUE)

# 3. 查看数据库中的所有表
tables <- dbListTables(con)
print(tables)

# 4. 执行SQL查询
# 方式1:使用dbGetQuery(返回数据框)
query_result <- dbGetQuery(
  conn = con,
  statement = "SELECT * FROM students WHERE age > 25"
)
print(query_result)

# 方式2:使用dbSendQuery(处理大量数据)
rs <- dbSendQuery(con, "SELECT * FROM students")
# 分批获取数据
chunk <- dbFetch(rs, n = 5)         # 获取5行
print("第一批5行:")
print(chunk)
chunk2 <- dbFetch(rs, n = 5)        # 再获取5行
print("第二批5行:")
print(chunk2)
# 清空结果集
dbClearResult(rs)

# 5. 参数化查询(防止SQL注入)
# 使用参数占位符
sql <- "SELECT * FROM students WHERE age > ?"
params <- list(30)
safe_query <- dbGetQuery(con, sql, params = params)
print("年龄大于30的学生:")
print(safe_query)

# 6. 执行其他SQL操作
# 创建表
dbExecute(con, "
  CREATE TABLE IF NOT EXISTS courses (
    course_id INTEGER PRIMARY KEY,
    course_name TEXT,
    credit INTEGER
  )
")

# 插入数据
dbExecute(con, 
  "INSERT INTO courses (course_name, credit) VALUES (?, ?)",
  params = list("数学", 3)
)

# 7. 关闭数据库连接
dbDisconnect(con)

案例代码(MySQL)

r 复制代码
# 安装并加载RMySQL
# install.packages("RMySQL")
library(RMySQL)
library(DBI)

# 1. 连接到MySQL数据库
# 方法1:使用dbConnect
mysql_con <- dbConnect(
  drv = MySQL(),
  host = "localhost",               # 服务器地址
  port = 3306,                      # 端口号
  user = "your_username",           # 用户名
  password = "your_password",       # 密码
  dbname = "your_database"          # 数据库名
)

# 方法2:使用RMariaDB(现代替代方案)
# install.packages("RMariaDB")
# library(RMariaDB)

# 2. 执行查询
mysql_data <- dbGetQuery(mysql_con, "SELECT * FROM your_table LIMIT 100")
print(head(mysql_data))

# 3. 写入数据到MySQL
dbWriteTable(mysql_con, "new_table", sample_df, overwrite = TRUE)

# 4. 关闭连接
dbDisconnect(mysql_con)

# 注意:实际使用时需要替换为真实的数据库连接信息

案例代码(使用RODBC连接各种数据库)

r 复制代码
# 安装并加载RODBC
# install.packages("RODBC")
library(RODBC)

# 1. 连接到ODBC数据源(Windows)
# con <- odbcConnect("DSN_Name", uid="user", pwd="password")

# 2. 直接连接Access数据库(示例)
# access_con <- odbcConnectAccess("database.accdb")

# 3. 执行查询
# data <- sqlQuery(con, "SELECT * FROM table")

# 4. 关闭连接
# odbcClose(con)

# 注意:ODBC连接需要预先配置数据源

7. 读取XML文件

需要的包XMLxml2

案例代码(使用XML包)

r 复制代码
# 安装并加载XML包
# install.packages("XML")
library(XML)

# 1. 解析XML文件
xml_doc <- xmlParse(
  file = "data.xml",                # XML文件路径
  encoding = "UTF-8"                # 编码
)

# 2. 获取根节点
root_node <- xmlRoot(xml_doc)
print(root_node)

# 3. 提取特定节点
# 使用XPath表达式
nodes <- getNodeSet(
  doc = xml_doc,
  path = "//record"                  # XPath: 查找所有record节点
)

# 4. 将XML转换为数据框
# 方法1:使用xmlToDataFrame
xml_df <- xmlToDataFrame(
  doc = "data.xml",
  stringsAsFactors = FALSE
)
print(head(xml_df))

# 方法2:手动解析
# 假设XML结构:
# <root>
#   <person>
#     <name>张三</name>
#     <age>25</age>
#   </person>
# </root>

# 提取所有person节点
person_nodes <- getNodeSet(xml_doc, "//person")

# 创建空数据框
person_data <- data.frame(
  name = character(),
  age = numeric(),
  stringsAsFactors = FALSE
)

# 遍历节点提取数据
for(node in person_nodes) {
  name <- xmlValue(node[["name"]])   # 提取name节点文本
  age <- as.numeric(xmlValue(node[["age"]]))  # 提取age节点文本
  
  # 添加到数据框
  person_data <- rbind(person_data, 
                        data.frame(name = name, age = age))
}

print(person_data)

# 5. 解析XML属性
# 假设XML: <person id="001">...
nodes_with_attrs <- getNodeSet(xml_doc, "//person")
for(node in nodes_with_attrs) {
  # 获取属性
  id <- xmlGetAttr(node, "id")
  print(paste("ID:", id))
}

# 6. 处理命名空间
# xml_doc <- xmlParse("ns_data.xml")
# namespaces <- c(ns = "http://example.com/ns")
# nodes <- getNodeSet(xml_doc, "//ns:element", namespaces = namespaces)

# 7. 从XML字符串解析
xml_string <- '<?xml version="1.0"?>
<data>
  <item value="1">第一项</item>
  <item value="2">第二项</item>
</data>'
xml_from_str <- xmlParse(xml_string, asText = TRUE)
print(xml_from_str)

案例代码(使用xml2包)

r 复制代码
# 安装并加载xml2包(更现代,更易用)
# install.packages("xml2")
library(xml2)
library(magrittr)  # 使用管道操作符

# 1. 读取XML文件
xml_data <- read_xml("data.xml")

# 2. 使用管道操作查询节点
# 查找所有record节点
records <- xml_data %>% 
  xml_find_all("//record")

# 3. 提取节点文本和属性
record_info <- lapply(records, function(record) {
  # 提取子节点文本
  name <- record %>% 
    xml_find_first(".//name") %>% 
    xml_text()
  
  # 提取属性
  id <- record %>% 
    xml_attr("id")
  
  # 返回列表
  list(id = id, name = name)
})

# 4. 转换为数据框
library(purrr)
record_df <- map_df(record_info, ~as.data.frame(.))
print(record_df)

# 5. 处理HTML文件(网页)
# html_data <- read_html("https://example.com")
# titles <- html_data %>% xml_find_all("//h1") %>% xml_text()

三、R语言自带的数据集

数据集介绍

查看所有可用数据集

r 复制代码
# 查看R自带的所有数据集
data()

# 查看已加载的数据集
data(package = .packages(all.available = TRUE))

# 查看特定包的数据集
library(datasets)
data(package = "datasets")

mtcars数据集(经典示例)

mtcars数据集详细分析

r 复制代码
# 1. 加载mtcars数据集
data(mtcars)

# 2. 查看数据集基本信息
# 查看前6行
head(mtcars)
# 查看后6行
tail(mtcars)
# 查看数据结构
str(mtcars)
# 查看摘要统计
summary(mtcars)

# 3. mtcars数据集说明
# mtcars包含32款汽车的11个指标:
# - mpg: 每加仑英里数(油耗)
# - cyl: 气缸数
# - disp: 排量(立方英寸)
# - hp: 马力
# - drat: 后桥比
# - wt: 重量(1000磅)
# - qsec: 1/4英里时间
# - vs: 发动机形状(0 = V型,1 = 直列)
# - am: 变速器(0 = 自动,1 = 手动)
# - gear: 前进档数
# - carb: 化油器数

# 4. 数据探索示例
# 查看变量名
names(mtcars)

# 查看维度
dim(mtcars)

# 查看列数
ncol(mtcars)

# 查看行数
nrow(mtcars)

# 5. 基本统计分析
# 计算平均油耗
mean_mpg <- mean(mtcars$mpg)
print(paste("平均油耗(英里/加仑):", round(mean_mpg, 2)))

# 按气缸分组统计
library(dplyr)  # 加载dplyr包进行数据操作
mpg_by_cyl <- mtcars %>%
  group_by(cyl) %>%
  summarise(
    count = n(),
    avg_mpg = mean(mpg),
    avg_hp = mean(hp)
  )
print(mpg_by_cyl)

# 手动和自动挡对比
am_comparison <- aggregate(
  mpg ~ am, 
  data = mtcars, 
  FUN = mean
)
print(am_comparison)

# 6. 数据可视化示例
# 绘制油耗与马力的散点图
plot(
  x = mtcars$hp, 
  y = mtcars$mpg,
  main = "油耗与马力关系图",      # 标题
  xlab = "马力",                   # X轴标签
  ylab = "油耗(英里/加仑)",      # Y轴标签
  pch = 19,                        # 点的类型
  col = "blue"                     # 点的颜色
)

# 添加趋势线
abline(
  lm(mpg ~ hp, data = mtcars),     # 线性回归线
  col = "red",                     # 线的颜色
  lwd = 2                          # 线宽
)

# 7. 导出mtcars数据
# 导出为CSV
write.csv(mtcars, "mtcars.csv", row.names = TRUE)

# 导出为R数据文件
save(mtcars, file = "mtcars.RData")

# 8. 其他常用内置数据集
# iris - 鸢尾花数据集(分类问题经典数据)
data(iris)
head(iris)

# AirPassengers - 航空乘客数(时间序列)
data(AirPassengers)
head(AirPassengers)

# cars - 汽车速度与刹车距离
data(cars)
head(cars)

# pressure - 气压与温度
data(pressure)
head(pressure)

# 9. 数据集使用技巧
# 懒加载数据集(不占用内存)
datasets::mtcars

# 查看数据集帮助文档
?mtcars
?iris
?AirPassengers

四、综合案例:完整的数据获取流程

案例1:从多个来源整合数据

r 复制代码
# 加载所需包
library(readxl)
library(haven)
library(dplyr)

# 1. 从CSV读取销售数据
sales_data <- read.csv(
  "sales_data.csv",
  stringsAsFactors = FALSE,
  fileEncoding = "UTF-8"
)
print(paste("销售数据行数:", nrow(sales_data)))

# 2. 从Excel读取产品信息
product_info <- read_excel(
  "product_info.xlsx",
  sheet = "Products"
)
print(paste("产品信息行数:", nrow(product_info)))

# 3. 从SPSS读取客户信息
customer_data <- read_sav("customer_data.sav")
print(paste("客户数据行数:", nrow(customer_data)))

# 4. 合并数据
# 将销售数据与产品信息合并
sales_with_product <- sales_data %>%
  left_join(product_info, by = "product_id")

# 将客户信息加入
final_data <- sales_with_product %>%
  left_join(customer_data, by = "customer_id")

print("最终合并后的数据维度:")
print(dim(final_data))

# 5. 保存合并后的数据
write.csv(final_data, "integrated_data.csv", row.names = FALSE)
save(final_data, file = "integrated_data.RData")

案例2:模拟数据生成(用于测试)

r 复制代码
# 创建模拟数据集进行测试
set.seed(123)  # 设置随机种子,确保结果可重现

# 1. 生成客户数据
customers <- data.frame(
  customer_id = 1:1000,
  name = paste0("Customer", 1:1000),
  age = round(runif(1000, 18, 80)),
  city = sample(c("北京", "上海", "广州", "深圳"), 1000, replace = TRUE),
  income = round(runif(1000, 3000, 30000))
)

# 2. 生成产品数据
products <- data.frame(
  product_id = 1:50,
  product_name = paste0("Product", LETTERS[1:50]),
  price = round(runif(50, 10, 1000), 2)
)

# 3. 生成销售记录
sales <- data.frame(
  transaction_id = 1:5000,
  customer_id = sample(1:1000, 5000, replace = TRUE),
  product_id = sample(1:50, 5000, replace = TRUE),
  quantity = sample(1:5, 5000, replace = TRUE),
  date = sample(seq(as.Date("2023-01-01"), as.Date("2023-12-31"), by = "day"), 5000, replace = TRUE)
)

# 4. 添加计算字段
sales$amount <- sales$quantity * products$price[sales$product_id]

# 5. 保存模拟数据
write.csv(customers, "sim_customers.csv", row.names = FALSE)
write.csv(products, "sim_products.csv", row.names = FALSE)
write.csv(sales, "sim_sales.csv", row.names = FALSE)

print("模拟数据生成完成!")

五、要点回顾

知识点 主要函数 适用场景 注意事项
手动输入 c(), data.frame(), matrix() 小规模测试数据 注意数据类型一致
CSV文件 read.csv(), write.csv() 通用数据交换格式 注意编码和分隔符
文本文件 read.table(), readLines() 非结构化文本 指定正确的分隔符
Excel文件 read_excel(), read.xlsx() 办公软件数据 需安装readxl包
SPSS文件 read_sav() 社会科学数据 使用haven包
Stata文件 read_dta() 计量经济学数据 版本兼容性
SAS文件 read_sas() 大型数据集 需要足够内存
数据库 dbConnect(), dbGetQuery() 大规模数据 注意连接管理
XML文件 xmlParse(), read_xml() 网页数据、配置文件 学习XPath语法
内置数据 data() 学习和测试 查看帮助文档

数据读取最佳实践

  1. 先查看数据结构 :使用str(), head(), summary()
  2. 处理缺失值 :使用na.omit(), complete.cases()
  3. 注意数据类型 :使用as.numeric(), as.Date()转换
  4. 编码问题 :设置encoding = "UTF-8"
  5. 大文件处理 :使用nrows参数或分块读取
  6. 路径管理 :使用setwd()或相对路径
相关推荐
原来是猿2 小时前
网络计算器:理解序列化与反序列化(下)
linux·开发语言·网络·网络协议·json·php
木木_王2 小时前
嵌入式学习 | STM32裸板驱动开发(Day01)入门学习笔记(超详细完整版|点灯实验 + 库函数代码 + 原理全解)
linux·驱动开发·笔记·stm32·学习
_waylau2 小时前
“Java+AI全栈工程师”问答02:Spring Boot 自动配置原理
java·开发语言·spring boot·后端·spring
JAVA面经实录9172 小时前
Java架构师最终完整版学习路线图
java·开发语言·学习
叶子野格2 小时前
数据集网站kaggle注册无验证码选项?
学习
勤自省2 小时前
ROS2从入门到“重启解决”:21讲8~12章踩坑血泪史与核心总结
linux·开发语言·ubuntu·ssh·ros
TIEM_692 小时前
C++string|遍历、模拟实现、赋值拷贝现代写法
开发语言·c++
计算机安禾2 小时前
【c++面向对象编程】第14篇:多态(一):虚函数——实现“一个接口,多种方法”
开发语言·c++
tellmewhoisi2 小时前
单独抽取用户服务(请求不通):feign添加拦截器(添加token)
java·开发语言