当前位置: 首页 > news >正文

R语言数据结构与数据处理基础内容

R语言数据结构与数据处理基础内容

  • 5.1向量
  • 5.2矩阵与数组
  • 5.3数据框
  • 5.4因子
  • 5.5列表

5.1向量

# 数据结构与数据处理# 5.1向量
# seq创建向量
seq(from = 1, to = 10, by = 1) 
# rep创建向量
x <- rep(3, 3)
rep(1:3, 2)      #已向量1:3举例,可换做任意向量,下文不在赘述
rep(1:3, each = 2)
#使用索引访问向量
my_vex = 1:3
for(i in 1:length(my_vex)){print(my_vex[i])
}
my_vex[10] #NA
my_vex[10] = 1; length(my_vex) #长度发生改变
my_vex[c(-1, -2)] #不查看1,2索引的值
#练习:删除1:10向量的后5个数
my_vex = seq(1, 10, 1)
my_vex <- my_vex[-(length(my_vex) - 5 + 1) : -length(my_vex)]
#使用逻辑型访问索引
my_vex[c(T,F)] #注意:向量不够长会循环补齐变为TFTF...所以结果为1 3 5
my_vex[c(T,T,F,F,F)]
#append(my_vex, vec_you_want, after = )函数添加索引
append(my_vex, 1:3, after = 1) #在第一个数字后添加123
#循环补齐,向量向加减等操作如果不够长,便会循环补齐,像上面所示
#向量的比较
c(1, 2, 3) == c(1, 2, 3)  # > < >= <= != == 都会逐个元素比较
identical(c(1, 2, 3), c(1, 2, 3) #整体比较identical(1.1 - 0.2, 0.9)#浮点数比较不能用identical,因为有精度误差
all.equal(1.1 - 0.2, 0.9)#all.equal相当于近似计算相等v1 <- c(1: 5)
any(v1 > 3? #any 向量中是否有值大于3
all(v1 > 3) #all 向量中是?袢看笥?3#按条件提取元素 例(选出平方大于5的元素)
# 这只是一种方法,当然也可以if函数+ for遍历
v1 <- -3:3
v1 * v1
v1 * v1 > 5
v2 <- v1[v1*v1 > 5]; v2

5.2矩阵与数组

#5.2矩阵与数组
#创建矩阵 , 默认列优先
#1.
matrix(1:12, nrow = 3, ncol = 4, byrow = F,dimnames = list(c("fir", "sec", "thi"), c("fir", "sec", "thi", "fou")))
#2.
y <- 1:12
dim(y) <- c(3, 4)
print(y)
#对角矩阵的创建
x <- 1: 3; diag(x)
x <- rep(1: 3); diag(x)
#矩阵的拼接 
mat1 <- rbind(A = 1:3, B = 4:6); mat1 #行拼接
mat2 <- cbind(mat1, c(7, 8), c(9, 10)); mat2 #列拼接
#线性代数的运算
#1 矩阵乘法 %*%
mat1 <- matrix(c(1: 6), nrow = 3); mat1
mat2 <- matrix(c(11:16), nrow = 2); mat2 
mat1 %*% mat2
#2 矩阵转置
mat3 <- t(mat1); mat3
#3. 矩阵?哪?
mat3 <- 1:4
dim(mat3) <- c(2, 2)
mat3 <- solve(mat3); mat3
#4. 矩阵的行列式值
det(mat3)
#5. 特征值分解eigen()
mat <- matrix(1: 9, nrow = 3)
eigen(mat)
#使用矩阵索引,读者可随便玩玩,R语言的访问很宽泛
mat1
mat1[,1]
mat1[1,];
mat1[2,2]
mat2
mat2[1,2:3]# apply函数族
mat <- matrix(1:9, nrow = 3)
apply(mat, 1, sum) #1是按行 2是按列, 最后面的参数是个函数,可以自己写
apply(mat, 2, sum)f <- function(x){
return (x - 1)
}
mat <- matrix(1:6, 3); mat
f(mat)#观察一下直接调用和下面的apply函数调用的区别
apply(mat, 1, f)
#多维数组
dim1 = c("Tom","Bob")
dim2 = c("math","chemis","phy")         
dim3 = c("semes_one", "semes_two")         
array(1:12, c(2, 3, 2), dimnames = list(dim1, dim2, dim3))

5.3数据框

#5.3数据框
#1. 数据框的创建
names <- c("Tom", "Bob","Jerry")
ages <- c(19,18,20)
df <- data.frame(names, ages, stringsAsFactors = F); df #stringsAsFactors = F 是为了防止自动转换为因子,具体见下文
#数据框的合并
#注意:rbind cbind 都不会改变原来的df,只有重新赋值后才可以。
rbind(df, list("Rose", 20)) #添加行,每一行是list,不是vec
cbind(df, weight = c(70, 73, 60))#添加列,每一列是vec,不是list
str(rbind(df, list("Fan","20")))
#merge()函数合并数据框
df1 <- data.frame( name = c("Tom", "Bob","Jerry"), age = c(19,18,20)); df1
df2 <- data.frame( name = c("Bob", "Tom","Jerry"), score = c(90,85,88)); df2
merge(df1, df2, by = "name")
#访问数据框中的元素
df1[2,] #访问第二行
df1[,1] #访问第一列
df1['name'] #访问name列
df1$age #访问age列 $符号可以理解为提取后面的列
#给数据框添加行名
row.names(df1) <- c("stu1", "stu2", "stu3"); df1
#使用sql语句查询数据框
install.packages("sqldf")
library(sqldf)
sqldf("select * from df1 where age > 18")

5.4因子

#5.4因子
data = c("East", "West", "North", "South", "East", "East", "West")
data_fac <- factor(data); data_fac
levels(data_fac) 
as.numeric(data_fac) #以数值类型显示因子,数值是上面levels的索引
data_fac[length(data_fac) + 1] = "East"; data_fac #可以添加已存在的因子水平
data_fac[length(data_fac) + 1] = "center"; data_fac #添加不存在的因子水平会产生NA
summary(data_fac)#因子总结函数 summary()

5.5列表

#5.5列表
#列表中可以包含多种数据类型
my_list <- list("it's a string of a list", num_vec1 = c(1, 2, 1), num_vec2 = c(3, 4, 5), df = data.frame(name = c("Tom", "Bob"), age = c(19, 18)),fun = function(v1, v2){return (v1 + v2)}); my_list
#可以通过索引号或者$符号访问列表中的元素
my_list[[1]] #访问第一个元素.  注意:这里是双中括号
my_list$num_vec1 #访问num_vec1元素#5.6数据的导入与导出
df <- read.table("C:\\Users\\21136\\OneDrive\\Desktop\\data.txt", header = T) #导入txt文件 要在当前工作目录下 可以用getwd()查看工作目录。 sep是分隔符
#除了read.table 还有read.csv read.csv2等函数,读者可自行查看帮助文档
write.table(df, file = "C:\\Users\\21136\\OneDrive\\Desktop\\data.txt", sep = "\t") #导出txt文件, 会覆盖掉原来的文件#5.7数据清洗
#排序
v <- c(3, 1, 4, 2)
sort(v) #升序排序
sort(v, decreasing = T) #降序排序
order(v) #返回排序后元素的索引
order(-v) #降序排序后元素的索引
v[order(v)] #等同于sort(v)df <- data.frame(a = c(5, 2, 2, 2), b = c(2, 5, 4, 9), c = c(75, 435, 43, 735))
df[order(df$a, -df$b), ] #先按a升序,再按b降序排序#离群点
x <- c(1:10, 20, -8)
boxplot.stats(x)$out #提取离群点
#缺失值NA的处理
x <- c(1, 2, NA, 4, NA, 5)
mean(x) #结果为NA
mean(x, na.rm = T) #去掉NA后计算均值
http://www.dtcms.com/a/520325.html

相关文章:

  • 求下列线性变换的矩阵
  • iOS 打包 IPA 全流程详解,签名配置、工具选择与跨平台上传实战指南
  • 前端代码规范:husky+ lint-staged+pre-commit
  • 房地产公司网站源码图片数量 wordpress
  • Qt-UDP
  • Ethernet/ip 转 Modbus RTU 驱动,罗克韦尔 PLC 与华为逆变器打造光伏电站智能监控典范
  • 与创新者同频!与FlagOS共赴开源之约
  • 【C++学习】函数及分文件编写
  • 网站免费推广计划新闻视频网站开发
  • 推进网站集约化建设的作用易企秀h5页面怎么制作
  • 2025年--Lc209- 75. 颜色分类(排序)--Java版
  • 郑州网站维护推广西安网站建设管理
  • 为 Claude Code CLI 提供美观且高度可定制的状态行,具有powerline support, themes, and more.
  • 第156期 适用于RAG的最佳开源嵌入模型 多语言自然语言处理及阿拉伯语文本的高性能开源嵌入模型
  • 公司网站建设需要哪些方面土地流转网站开发
  • Grafana监控可视化
  • GEO数据分析与效果归因:GEO 效果的多维度分析框架
  • 31.stream数据类型应用
  • 蓝牙协议6.1
  • 微服务中的服务熔断、降级与限流
  • 查网站的建站系统百度搜索网站图片
  • 网站界面风格设计描述网站类网站开发犯罪吗
  • 新站点seo联系方式设计工作室网站首页
  • Adobe Lightroom Classic 2025解锁版 (专业照片管理)
  • univla复现libero
  • kubernets的pod管理
  • 14、【Ubuntu】【VSCode】VSCode 断联问题分析:hostname(二)
  • Java 堆排序(Heap Sort)详解教程
  • 软件设计师知识点总结:操作系统
  • 黄岩路桥网站设计网站流量提升方案