京公网安备 11010802034615号
经营许可证编号:京B2-20210330
R语言简单操作,数值与向量
1 向量与赋值
R对命名了的数据结构进行操作。最简单的数据结构是数字向量;如,
> x <- c(10.4, 5.6, 3.1, 6.4, 21.7) c()是创建函数,赋值运算符是'<-',与函数assign()等价
> assign("x", c(10.4, 5.6, 3.1, 6.4, 21.7)) 也可以写成:
> c(10.4, 5.6, 3.1, 6.4, 21.7) -> x
如果一个表达式被当作一个完整的命令,它的值将被打印到终端但不被储存。
单独输入x则会将值打印出来。也可以打印倒数:
> 1/x
> y <- c(x, 0, x) 也可以将向量作为元素。
2 向量运算
操作是按照向量中的元素一个一个进行的。同一个表达式中的向量并不需要具有相同的长度。如果它们的长度不同,表达式的结果是一个与表达式中最长向量有相同长度的向量。表达式中较短的向量会根据它的长度被重复使用若干次(不一定是整数次),直到与长度最长的向量相匹配。而常数很明显的将被不断重复。如,
> v <- 2*x + y + 1
常用运算有:
+,-,*,/,^(次方);
log, exp, sin, cos, tan,sqrt等;
max和min的作用是选出所给向量中最大的或最小的元素;
range函数的值是一个长度为2的向量,即c(min(x),max(x))
length(x)返回了向量x中元素的个数,也就是x的长度。
sum(x)给出了x中所有元素的总和;
prod(x)给出x中所有元素的乘积;
mean(x)和var(x),分别计算样本均值和样本方差,这两个函数分别相当于sum(x)/length(x),sum((x-mean(x)) \^2)/(length(x) -1)。如果var()的参数是一个n*p的矩阵,那么函数的值是一个p*p的样本协方差矩阵,认为每行是一个p变量的样本向量。
sort(x)返回一个与x具有相同长度的向量,其中的元素按招升序排列。还有其他更灵活的排序功能(参见order()和sort.list())。
pmax和pmin将返回一个与最长的向量长度相等的向量,向量中的元素由参数中所有向量在相应位置的最大值(最小值)组成;
如果要使用复数,需要直接给出一个复数部分。因此sqrt(-17)将会返回NaN(无效数值)和一个警告,而sqrt(-17+0i)将按照复数进行运算。
3 生成序列
最简单的方法是用冒号‘:’,冒号具有最高运算优先级。例如1:30就是向量c(1,2,. . .,29,30)。30:1构造一个递减序列。
利用seq()函数构造序列:有五个参数,from, to, by, length, along
from, to可以不写参数名,seq(2,10)就相当于2:10。
by指定步长,默认为1,如seq(-5, 5, by=.2)即为c(-5.0, -4.8, -4.6, ..., 4.6, 4.8, 5.0)
length指定序列长度,如seq(length=51, from=-5, by=.2),等同于seq(-5, 5, by=.2)
along=vector只能单独使用,产生一个“1:length(vector)”序列。类似的函数是rep(),这个函数可以用多种复杂的方法来
复制一个对象。最简单的形式是> s5 <- rep(x, times=5)
4 逻辑向量
TRUE, FALSE, 和NA(not available), 前两个可以简写为T和F,但T/F并不是系统保留字,可以被用户覆盖,所以最好还是不要简写。
逻辑向量是由条件给出的,如下列语句令temp成为一个与x长度相同,相应位置根据是否与条件相符而由TRUE或FALSE组成的向量:
> temp <- x > 13
逻辑操作符包括<, <=, >, >=,完全相等==和不等于!=,与或非分别为&, |, !。
在普通运算中,FALSE当做0而TRUE当做1。
5 缺失值
NA(not available): 一般来讲一个NA的任何操作都将返回NA。
is.na(x)返回一个与x等长的逻辑向量,并且由相应位置的元素是否是NA来决定这个逻辑向量相应位置的元素是TRUE还是FALSE。
x==NA是一个与x具有相同长度而其所有元素都是NA的向量。
NaN(Not a Number): 由数值运算产生,如0/0, Inf-Inf.
is.na(x)对于NA和NaN值都返回TRUE,
is.nan(x)只对NaN值返回TRUE。
6 字符向量
字符串在输入时可以使用单引号(')或双以号("); 在打印时用双引号(有时不用引号)。
R使用与C语言风格基本相同的转义符, 所以输入\\打印的也是\\, 输入\" 打印引号", \n: 换行, \t: tab, \b: 回格。
字符向量可以通过函数c()连接;
paste()可以接受任意个参数,并从它们中逐个取出字符并连成字符串,形成的字符串的个数与参数中最长字符串的长度相同。如果参数中包含数字的话,数字将被强制转化为字符串。在默认情况下,参数中的各字符串是被一个空格分隔的,不过通过参数sep=string
用户可以把它更改为其他字符串,包括空字符串。例如:
> labs <- paste(c("X","Y"), 1:10, sep="") 使变量labs成为字符变量c("X1", "Y2", "X3", "Y4", "X5", "Y6", "X7", "Y8", "X9", "Y10")
7 index vector---数据集子集的选择与修改
任何结果为一个向量的表达式都可以通过追加索引向量(index vector)来选择其中的子集。
1 逻辑的向量。
> y <- x[!is.na(x)] 表示将向量x中的非NA元素赋给y;
> (x+1)[(!is.na(x)) & x>0] -> z 表示创建一个对象z,其中的元素由向量x+1中与x中的非缺失值和正数对应的向量组成。
2. 正整数的向量
> x[6] 是x的第六个元素
> x[1:10] 选取了x的前10个元素(假设x的长度不小于10)。
> c("x","y")[rep(c(1,2,2,1), times=4)] 产生了一个字符向量,长度为16,由"x", "y", "y", "x"重复4次而组成。
3. 负整数的向量
> y <- x[-(1:5)] 表示向量y取向量x前5个元素以外的元素。
4. 字符串的向量
只存在于拥有names属性并由它来区分向量中元素的向量。这种情况下一个由名称组成的子向量起到了和正整数的索引向量相同的效果。
> fruit <- c(5, 10, 1, 20)
> names(fruit) <- c("orange", "banana", "apple", "peach")
> lunch <- fruit[c("apple","orange")]
子集的修改
> x[is.na(x)] <- 0 表示将向量x中所以NA元素用0来代替
> y[y < 0] <- -y[y < 0] 表示将向量(-y)中 与向量y的负元素对应位置的元素 赋值给 向量y中 与向量y负元素对应的元素。作用相当于:
> y <- abs(y)
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
一、问题:为什么 ID 会"断号" 很多刚接触 MySQL 的同学都会有一个困惑:表里的主键 ID 是自增的,删了中间几行数据之后,ID 变 ...
2026-10-22一、问题场景:为什么会重复 JOIN 同一个子查询 在写复杂 SQL 时,经常遇到这种需求:同一张表或同一个聚合子查询,要和主表关联 ...
2026-10-22人力资源专员是HR体系的执行入口。招聘信息发布、简历初筛、面试安排、考勤汇总、入离职手续、劳动合同与档案管理,大多由这个岗 ...
2026-10-22人力资源经理问“必学技巧”,真正要解决的不是知识清单不够长,而是时间有限、业务催得紧,学完却用不上。更有效的路径是:先用 ...
2026-10-22内容营销岗位的核心任务,不是“把文案写得更漂亮”,而是围绕目标受众,用持续的内容供给影响认知、推动转化并沉淀复购。它至少 ...
2026-10-22理财经理培训课程很多,难的是判断“先学什么、后学什么、学完能做什么”。与其按课程名称罗列,不如先看岗位任务:客户分层与维 ...
2026-10-22理财经理的知识结构,可以先用一句话概括:合规与产品知识决定“不出错”,客户经营与资产配置决定“够不够专业”,市场研判与数 ...
2026-10-22经济学背景做数据分析,优势不在工具,而在问题意识:供需如何相互作用、成本与收益如何权衡、变量之间是相关还是因果。真正的缺 ...
2026-10-22需要,但要把“需要”理解准确。经济学本身就在处理数据:GDP、物价、就业、企业营收、问卷调研,都是经济分析的原料。真正的区 ...
2026-10-22经济学分析能力不是单一技能,它至少由三层构成:把现实问题转成可检验假设的理论框架能力、用数据与统计方法验证假设的工具能力 ...
2026-10-22金融分析师的知识提升,先补的不是更多模型,而是让结论可复核的底层能力。按任务顺序,大致是四层:财务与业务理解、指标口径管 ...
2026-10-22金融分析师的“通用技能”,指换到不同机构、不同行业组仍用得上的底层能力,而非某家公司内部系统的操作经验。按任务拆,日常要 ...
2026-10-22先给结论:数据分析证书不是金融分析师的准入条件,招聘方也不会因为一张证书就直接判断你能做分析。要不要考,取决于你当前任务 ...
2026-10-22金融分析师的核心技能,不是“会看K线”或“会讲宏观”,而是能把一家公司、一个行业或一类资产,转化为可核查的数据判断与书面 ...
2026-10-22产品经理的知识提升,不是把需求文档、原型、SQL、数据分析、项目管理都学一遍,而是先对准目标岗位的真实任务,找出自己最缺的 ...
2026-10-22产品专员提升工作知识,最有效的方式不是先囤课程,而是围绕日常交付的四件事来补:需求调研与优先级判断、原型与PRD表达、竞品 ...
2026-10-22产品运营专员提升个人能力,常见误区是先把Excel、SQL、Python列成一张学习清单,然后从第一个工具开始学。更有效的做法是先回答 ...
2026-10-22产品运营的能力提升,最怕从“课程目录”出发:今天学增长模型,明天背SQL语法,学完却说不清自己负责的功能为什么激活率低。更 ...
2026-10-22产品经理的技能和影响力不是两条分开的赛道。技能决定你能不能把问题分析清楚、把方案设计对;影响力决定你的判断能否被团队接受 ...
2026-10-22产品经理要学的数据分析能力,不是“会写SQL”或“会用BI工具”这么简单。更准确地说,是围绕需求评估、功能迭代、指标监控、实 ...
2026-10-22