R语言表与因子(详细知识点,深入知识点后续会补充!)

(1) level表示额外的信息,包含向量中不同值的记录 

> x<-c(5,12,13,12)
> xf<-factor(x)
> xf
[1] 5  12 13 12
Levels: 5 12 13
#xf中不同数值(5,12,13)就是水平>length(xf)
[1] 4
#因子的长度定义为数据的长度,而不是水平的长度#可以提前插入新的水平
> x<-c(5,12,13,12)
> xff<-factor(x,levels = c(5,12,13,88))
> xff
[1] 5  12 13 12
Levels: 5 12 13 88
> xff[2]<-88
> xff
[1] 5  88 13 12
Levels: 5 12 13 88但是不能添加非法的水平
> xff[2]<-28
Warning message:
In `[<-.factor`(`*tmp*`, 2, value = 28) : 因子层次有错,产生了NA

(2)tapply函数

> ages<-c(25,26,55,37,21,42)
> affils<-c("R","D","D","R","U","D")
> tapply(ages,affils,mean)D  R  U 
41 31 21 
这里返回的是mean(u[x]),mean(u[y]),mean(u[z])#也可以使用自定义函数
x <- c(1, 2, 3, 4, 5, 6)# 创建一个因子
f <- factor(c("A", "B", "A", "B", "A", "B"))# 自定义函数,计算每个子集的标准差
my_function <- function(x) {return(sd(x))
}# 使用tapply应用自定义函数
result <- tapply(x, f, my_function)
print(result)#输出A      B 
1.632993 1.632993 #多因子拆分x <- c(1, 2, 3, 4, 5, 6)# 创建两个因子
f1 <- factor(c("A", "A", "B", "B", "A", "B"))
f2 <- factor(c("X", "Y", "X", "Y", "Y", "X"))# 使用tapply计算平均值
result <- tapply(x, list(f1, f2), mean)
print(result)#输出X   Y
A 3.0 5.0
B 4.5 4.0

(3)split函数

#根据因子拆分向量x <- c(1, 2, 3, 4, 5, 6)# 创建一个因子
f <- factor(c("A", "B", "A", "B", "A", "B"))# 使用 split() 函数拆分向量
result <- split(x, f)
print(result)#输出
$A
[1] 1 3 5$B
[1] 2 4 6#根据向量拆分数据框
# 创建一个数据框
df <- data.frame(x = c(1, 2, 3, 4, 5, 6),y = c("A", "B", "A", "B", "A", "B")
)# 使用 split() 函数根据向量拆分数据框
result <- split(df, df$y)
print(result)#输出
$Ax y
1 1 A
3 3 A
5 5 A$Bx y
2 2 B
4 4 B
6 6 B#根据自定义函数拆分向量x <- c(1, 2, 3, 4, 5, 6)# 自定义函数,根据奇偶性拆分向量
my_function <- function(x) {ifelse(x %% 2 == 0, "Even", "Odd")
}# 使用 split() 函数根据自定义函数拆分向量
result <- split(x, my_function(x))
print(result)#输出
$Odd
[1] 1 3 5$Even
[1] 2 4 6

(4)by()函数

by(data, INDICES, FUN, ...)

  • data:要拆分的数据框、列表或向量。
  • INDICES:用于拆分数据的因子、列表或向量。
  • FUN:要应用于每个子集的函数。
  • ...:传递给函数 FUN 的其他参数。
#对数据框的列进行拆分和求和
# 创建一个数据框
df <- data.frame(group = rep(c("A", "B", "C"), each = 3),value = 1:9
)# 使用 by() 函数对数据框的 value 列按照 group 列进行拆分和求和
result <- by(df$value, df$group, sum)
print(result)#输出
df$group: A
[1] 6
------------------------------------------------------------ 
df$group: B
[1] 15
------------------------------------------------------------ 
df$group: C
[1] 24#对列表中的元素进行拆分和求平均值list_data <- list(A = c(1, 2, 3),B = c(4, 5, 6),C = c(7, 8, 9)
)# 使用 by() 函数对列表中的元素进行拆分和求平均值
result <- by(list_data, names(list_data), mean)
print(result)
#输出
names(list_data): A
[1] 2
------------------------------------------------------------ 
names(list_data): B
[1] 5
------------------------------------------------------------ 
names(list_data): C
[1] 8#对向量进行拆分和自定义操作
# 创建一个向量
x <- c(1, 2, 3, 4, 5, 6)# 创建一个因子
f <- factor(c("A", "B", "A", "B", "A", "B"))# 自定义函数,计算每个子集的中位数
my_function <- function(x) {return(median(x))
}# 使用 by() 函数对向量按照因子进行拆分和计算中位数
result <- by(x, f, my_function)
print(result)#输出
f: A
[1] 2------------------------------------------------------------ 
f: B
[1] 4

(5)表的操作

> u<-c(22,8,33,6,8,29,-2)
> f1<-list(c(5,12,13,12,13,5,13),c("a","bc","a","a","bc","a","a"))
> tapply(u,f1,length)a bc
5  2 NA
12 1  1
#根据以上学习的tapply,得到的分组如下,但是事实上NA应该为0,因为没有第一因子是5,第二银子为"bc"的例子
所以应该用table()建表
> table(f1)f1.2
f1.1 a bc5  2  012 1  113 2  1
#这里计算的是频数#这里用一维的频数理解一下
> table(c(5,12,13,12,8,5))5  8 12 13 2  1  2  1 #也可以建立三维表
> gender<-c("M","M","F","M","F","F")
> race<-c("W","W","A","O","B","B")
> pol<-c("L","L","C","L","L","C")
> v<-data.frame(gender,race,pol)
> vgender race pol
1      M    W   L
2      M    W   L
3      F    A   C
4      M    O   L
5      F    B   L
6      F    B   C
> vt<-table(v)
> vt
, , pol = Crace
gender A B O WF 1 1 0 0M 0 0 0 0, , pol = Lrace
gender A B O WF 0 1 0 0M 0 0 1 2

(6)对表的矩阵操作 

> ct<-read.table("D://ct.dat",header=T)
> ctVote.for.X Voted.For.X.Last.Time
1        YES                   YES
2        YES                    NO
3         NO                    NO
4   Not Sure                   YES
5         NO                    NO
> cttab<-table(ct)
> cttabVoted.For.X.Last.Time
Vote.for.X NO YESNO        2   0Not Sure  0   1YES       1   1#在R中,我们还是把表当作矩阵进行处理
> class(cttab)
[1] "table"
> cttab[1,1]
[1] 2NO YES 2   0 #与标量进行运算
> cttab/5Voted.For.X.Last.Time
Vote.for.X  NO YESNO       0.4 0.0Not Sure 0.0 0.2YES      0.2 0.2#以下为Vote.for.X变量的边际值:2+0=2,0+1=1,1+1=2
> apply(cttab,1,sum)NO Not Sure      YES 2        1        2 #实际上可以用addmargins()解决边际值问题
> addmargins(cttab)Voted.For.X.Last.Time
Vote.for.X NO YES SumNO        2   0   2Not Sure  0   1   1YES       1   1   2Sum       3   2   5
> 
#这样可以得到一个二维的边际数据#dimnames可以得到边际值的名称和水平值
> dimnames(cttab)
$Vote.for.X
[1] "NO"       "Not Sure" "YES"     $Voted.For.X.Last.Time
[1] "NO"  "YES"

(7)aggregate()函数

用于按照指定的因子变量对数据进行分组,并对每个组应用一个函数进行聚合操作

aggregate(formula, data, FUN, ...)

  • formula 是一个公式对象,用于定义要聚合的变量和分组的因子变量。
  • data 是一个数据框或数据集,包含要聚合的数据。
  • FUN 是一个函数,用于指定要应用于每个分组的聚合操作。常见的函数有summeanmedianmaxmin等。
df <- data.frame(group = c("A", "A", "B", "B", "C", "C"),value = c(10, 15, 5, 8, 20, 25)
)# 使用aggregate函数计算平均值
result <- aggregate(value ~ group, data = df, FUN = mean)
#计算每一组因子的平均值
> resultgroup value
1     A  12.5
2     B   6.5
3     C  22.5

(8)cut()函数

cut()函数用于将连续型的数值变量划分为离散的区间

cut(x, breaks, labels = NULL, include.lowest = FALSE, right = TRUE, dig.lab = 3, ...)\

  • x 是要进行切分的数值变量。
  • breaks 是用于指定区间的断点。可以有多种不同的方式来指定断点,例如一个整数(表示分割成等宽的区间)、一个向量(表示自定义的断点)、一个数值表示分割的区间个数等。
  • labels 是可选参数,用于指定每个区间的标签。如果未指定,则默认使用区间的范围作为标签。
    • labels = FALSE时,切分后的区间将使用数字表示。例如,如果将数值变量划分为3个区间,那么第一个区间将表示为1,第二个区间表示为2,以此类推。

    • labels = TRUE时,切分后的区间将使用字符型的标签表示。默认情况下,将使用区间的范围作为标签。例如,如果将数值变量划分为三个区间,范围分别为(0, 30](30, 60](60, 100],则标签分别为(0, 30](30, 60](60, 100]

  • include.lowest 是一个逻辑值(TRUE或FALSE),表示是否包括最小值在内的左端点。
  • right 是一个逻辑值,用于指定区间是否是右开的。
  • dig.lab 是一个整数,表示标签的小数位数。
values <- c(10, 20, 30, 40, 50, 60, 70)# 使用cut函数进行切分
cut_values <- cut(values, breaks = c(0, 30, 60, 100))print(cut_values)
[1] (0,30]   (0,30]   (0,30]   (30,60]  (30,60]  (30,60]  (60,100]
Levels: (0,30] (30,60] (60,100]> z<-c(0.88,0.28,0.58,0.42,0.46,0.24,0.0528,0.88)
> z<-c(0.88,0.28,0.58,0.42,0.46,0.24,0.0528,0.88035)
> seq(from=0.0,to=1.0,by=0.1)[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
> binmarks<-seq(from=0.0,to=1.0,by=0.1)
> cut(z,binmarks,labels = F)
[1] 9 3 6 5 5 3 1 9
#例如z[1],0.88落在第九个区间,即(0.0,0.1]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/79767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 圆形进度条 横向进度条 不确定转圈进度条

1 横向进度条 <ProgressBarstyle"android:style/Widget.ProgressBar.Horizontal"android:layout_width"match_parent"android:layout_height"wrap_content"android:layout_gravity"center"android:max"100"android:secon…

14. 线性代数 - 线性方程组

文章目录 线性方程组矩阵行列式全排列和逆序数N阶行列式(非)齐次线性方程Hi,大家好。我是茶桁。 结束了「微积分」部分的学习之后我们稍作休整,今天正式开始另外一部分:「线性代数」的学习。小伙伴们放松完回来要开始紧张起来了。 我们之前说过,不管是哪一个工程学科,根…

Vue3 实现一个无缝滚动组件(支持鼠标手动滚动)

Vue3 实现一个无缝滚动组件&#xff08;支持鼠标手动滚动&#xff09; 前言 在日常开发中&#xff0c;经常遇到需要支持列表循环滚动展示&#xff0c;特别是在数据化大屏开发中&#xff0c;无缝滚动使用频率更为频繁&#xff0c;在jquery时代&#xff0c;我们常用的无缝滚动组…

基于JAVA+SSM+微信小程序+MySql的图书捐赠管理系统设计与实现

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 在当今社会&#xff0…

手机+卫星的科技狂想

最近硬件圈最火热的话题之一&#xff0c;应该就是突然上线、遥遥领先的华为Mate 60 Pro了。 其中&#xff0c;CPU和类5G网速是怎么实现的&#xff0c;是大家特别关注的问题。相比之下&#xff0c;卫星通话这个功能&#xff0c;讨论度就略低一些&#xff08;没有说不火的意思&am…

解决npm install遇到的问题:Error while executing:

目录 一、遇到问题 二、解决办法 三、备用方案 一、遇到问题 npm ERR! Error while executing: npm ERR! D:\IT_base\git\Git\cmd\git.EXE ls-remote -h -t ssh://gitgithub.com/sohee-lee7/Squire.git npm ERR! npm ERR! fatal: unable to access https://github.com/so…

90. 子集 II

给你一个整数数组 nums &#xff0c;其中可能包含重复元素&#xff0c;请你返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。返回的解集中&#xff0c;子集可以按 任意顺序 排列。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,2] 输出…

安装Anaconda与pytorch,在IDEA中配置环境进行编程

1.官网下载与自己python版本匹配的Anaconda(注意&#xff0c;要想成功安装pytorch&#xff0c;python版本也要对应pytorch的相关版本) Anaconda官网最新版本 与自己python版本不否请查找自己版本anaconda版本对应 清华大学镜像下载 2.安装时勾选添加环境变量或者手动添加&am…

day41 jdk8新特性Stream流 数据库安装

一、创建流 通过Collection对象的stream()或者parallelStream() 通过Arrays类的stream(Array[]<T>)方法 通过Stream接口of() iterate() generate()方法 通过 IntStream, LongStream, DoubleStream接口中的of(), range(), rangeClosed()方法 二、流的操作 一个str…

rocketmq

&#x1f353;代码仓库 https://gitee.com/xuhx615/rocket-mqdemo.git &#x1f353;基本概念 ⭐生产者(Producer)&#xff1a;消息发布者⭐主题&#xff08;Topic&#xff09;&#xff1a;topic用于标识同一类业务类型的消息⭐消息队列&#xff08;MessageQueue&#xff09…

el-table 列背景色渐变

最初的想法是&#xff0c;给每一行添加背景色&#xff0c;逐行递减透明度&#xff0c;发现结果比较突兀&#xff0c;效果如下&#xff1a; 如果有需要这种样式的&#xff0c;代码如下&#xff1a; <template><div><el-table:data"tableData":heade…

LeetCode_拓扑排序_BFS_中等_1462.课程表 IV

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 你总共需要上 numCourses 门课&#xff0c;课程编号依次为 0 到 numCourses - 1 。你会得到一个数组 prerequisite &#xff0c;其中 prerequisites[i] [ai, bi] 表示如果你想选 bi 课程&#xff0c;你必须先…

在macOS使用VMware踩过的坑

目录 MAC提示将对您的电脑造成伤害/MAC OS 升级到10.15.3后vmware虚拟机黑屏 mac系统下&#xff0c;vm虚拟机提示打不开/dev/vmmon mac VMware Workstation 在此主机上不支持嵌套虚拟化 mac VMware清理虚拟机空间 VMware Fusion 13在M2芯片的Mac上安装 Windows 11 首先需…

精品SpringCloud的B2C模式在线学习网微服务分布式

《[含文档PPT源码等]精品基于SpringCloud实现的B2C模式在线学习网站-微服务-分布式》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;springcloud JDK版本&#xf…

Spring boot 实践(16)Nacos server 2.2.3 下载安装

1、Nacos server下载 登录网址Releases alibaba/nacos GitHub&#xff0c;进入下载页面&#xff0c;显示如下&#xff1a; 选择“nacos-server-2.2.3.zip”版本 解压缩&#xff0c;目录文件如下图所示&#xff1a; 配置文件位于“conf”目录下&#xff0c;名称为“applicat…

java在mysql中查询内容无法塞入实体类中,报错 all elements are null

目录 一、问题描述二、解决方案 一、问题描述 java项目中整体配置了mysql的驼峰式字段匹配规则。 mybatis.configuration.map-underscore-to-camel-casetrue由于项目需求&#xff0c;需要返回字段为file_id&#xff0c;file_url&#xff0c;并且放入实体类中&#xff0c;实体…

Java 获取豆瓣电影TOP250

对于爬虫&#xff0c;Java并不是最擅长的&#xff0c;但是也可以实现&#xff0c;此次主要用到的包有hutool和jsoup。 hutool是一个Java工具包&#xff0c;它简化了Java的各种API操作&#xff0c;包括文件操作、类型转换、HTTP、日期处理、JSON处理、加密解密等。它的目标是使…

laravel框架 - cache篇

Laravel中的cache为我们提供了三种缓存机制。 Redis&#xff0c;memcache&#xff0c;以及框架的文件缓存。 这里主要看的是cache中的文件缓存。 一&#xff1a;访问多个缓存存储 使用 Cache 门面&#xff0c;你可以使用 store 方法访问不同的缓存存储器&#xff0c;传入 s…

C++版本的OpenCV实现二维图像的卷积定理(通过傅里叶变换实现二维图像的卷积过程,附代码!!)

C版本的OpenCV库实现二维图像的卷积定理过程详解 前言一、卷积定理简单介绍二、不同卷积过程对应的傅里叶变换过程1、“Same”卷积2、“Full”卷积3、“Valid”卷积 三、基于OpenCV库实现的二维图像卷积定理四、基于FFTW库实现的二维图像卷积定理五、总结与讨论 前言 工作中用…

pgzrun 拼图游戏制作过程详解(6,7)

6. 检查拼图完成 初始化标记成功的变量Is_Win Is_WinFalse 当鼠标点击小拼图时&#xff0c;判断所有小拼图是否都在正确的位置&#xff0c;并更新Is_Win。 def on_mouse_down(pos,button): # 当鼠标被点击时# 略is_win Truefor i in range(6):for j in range(4):Square S…