R语言操作和处理数据小总结

在R文本编辑器中输入数据

elements<- data.frame()
elements<- edit(elements)
print(elements)
str(iris)

提取前5行

iris[1:5,]

提取“Sepal.Length","Sepal.Width”两列的前5行

iris[1:5,c("Sepal.Length","Sepal.Width")]
sample(1:6,10,replace = TRUE)

指定种子值

set.seed(20)
index<- sample(1:nrow(iris),5)
index
iris[index,]

寻找重复值

duplicated(c(1,2,3,1,2,1,4,3))

查找哪一行是重复的

which(duplicated(iris))

删除重复项

##方法1 指定一个逻辑向量,FALSE表示去掉对应的元素。
##!运算符表示逻辑非,也就是说它会将TRUE变成FALSE,FALSE变成TRUE。
#即不要重复这一行
iris[!duplicated(iris),]
##方法2 指定负值
index<- which(duplicated(iris))
iris[-index,]
#删除包含缺失值的行
str(airquality)
complete.cases(airquality)
x<- airquality[complete.cases(airquality),]
str(x)
#方法2删除包含缺失值的行
x<- na.omit(airquality)

使用原始数据时要将其赋值,这样才能不会删除修改原来数据帧中的内容

数据帧的列运算

计算花萼的长宽比

y<- iris$Sepal.Length/iris$Sepal.Width
head(y)

利用with 和within提升代码的可读性来进行计算

z<- with(iris, Sepal.Length / Sepal.Width)
···
#利用identical(x,y)来验证两个变量到底是否完全相同
···
identical(y,z)

within函数对列进行复制,假设我们想把计算得到的长宽比存储到原始数据帧中

iris$ratio<-  iris$Sepal.Length/iris$Sepal.Width

也可以写成下列格式

iris<- within(iris,ratio<- Sepal.Length/Sepal.Width) 
head(iris$ratio)

##########

rm(list = ls())

对数据进行分组

######################

1. 用cut创建等量分组

head(state.x77)

提取Frost列

frost<- state.x77[,"Frost"]
head(frost,5)
cut(frost,3,include.lowest = TRUE)

2.为cut添加标签

cut(frost,3,include.lowest = TRUE,labels = c("Low","Med","High"))

3.使用table对观测进行计数

x<- cut(frost,3,include.lowest = TRUE,labels = c("Low","Med","High"))
table(x)

数据集的组合

merge()函数的使用

all.states<- as.data.frame(state.x77)
all.states$Name<- rownames(state.x77)
rownames(all.states)<- NULL
str(all.states)

提取气候寒冷的州

cold.states<- all.states[all.states$Frost>150,c("Name","Frost")]
cold.states

提取面积最大的州

large.states<- all.states[all.states$Area>=100000,c("Name","Area")]
large.states

使用merge使两个数据找到交集

merge(cold.states,large.states)

取∪集

merge(cold.states,large.states,all = TRUE)

使用查询表#match()函数可以返回两个向量中相匹配的元素的位置,是第一个向量在第二个向量中首次匹配的位置

index<- match(cold.states$Name,large.states$Name)
index

使用na.omit()函数去除向量中的NA值

large.states[na.omit(index),]

%in%函数,能够返回一个逻辑向量,告诉我们哪些地方的值是匹配的

index<- cold.states$Name %in% large.states$Name
index

#####################

数据排列

数据准备

some.states<- data.frame(Region=state.region,state.x77)

取前十行,前三列

some.states<- some.states[1:10,1:3]
some.states

利用sort进行升序

sort(some.states$Population)

降序

sort(some.states$Population,decreasing = TRUE)

获取排序后的位置

order.pop<- order(some.states$Population)
order.pop
代码告诉我们第一个元素位于第二位,第二个位于第8位
some.states$Population[order.pop]

数据帧的升排序

some.states[order.pop,]

降序

order(some.states$Population)
order(some.states$Population,decreasing = TRUE)

可以利用order的结果对数据帧进行降序排列,忽略存储位置的中间变量

some.states[order(some.states$Population,decreasing = TRUE),]

基于多列进行排序

当有了多个向量一致时,第一个向量值相同时,利用第二个向量进行比较

index<- with(some.states,order(Region,Population))
some.states[index,]

#####################################################
########使用apply()函数########

str(Titanic)

按照第一维度class对titanic数据集进行遍历统计

apply(Titanic,1,sum)
apply(Titanic,3,sum)
apply(Titanic,c(3,4),sum)

lapply和sapply

要获得iris数据集中每个元素的类型

lapply(iris,class)

使用sapply()时,R会尝试对结果进行花间,转换为矩阵或向量

sapply(iris,class)

sapply(iris,function(x) ifelse(is.numeric(x),mean(x),NA))

使用tappy()创建表格型汇总数据

tapply(iris$Sepal.Length,iris$Species,mean)

使用tapply()创建高维表格

str(mtcars)

将发动机的自动挡(0)和手动挡(1)的数据进行整合,成为一个因子型数据

cars<- within(mtcars,am<- factor(am,levels = 0:1,labels = c("Automatic","Manual")))
with(cars,tapply(mpg, am, mean))
with(cars,tapply(mpg,list(gear,am),mean))

reshape2包可以实现长数据和宽数据之间的转换

install.packages("reshape2")
library("reshape2")
goals<- data.frame(
  Game=c("1st","2nd","3rd","4th"),
  venue=c("Bruges","Ghent","Ghent","Bruges"),
  Granny=c(12,4,5,6),
  Gertrude=c(11,5,6,7)
  )
goals

要让数据从宽变长,可以使用melt()函数进行融化

由长变宽,则使用dcast()或者acast()

mgoals<- melt(goals,id.vars = c("Game","venue"))
mgoals
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容

  • 移动直播行业的火热会在很长一段时间内持续,通过和各行业的整合,从而成为具有无限可能性的行业。主要因为以下三个原因:...
    齐木支阅读 1,216评论 0 20
  • 1.每天给自己制造一点小辛福,辛福是一种能力 2.每天给自己制造一点小挑战,可以增加成就感,可以加技能,挑战可以使...
    风清杨阅读 52评论 0 1
  • 原文链接 静脉曲张:概述 介绍 静脉曲张是浅表的皮下静脉在皮肤上呈现紫色或蓝色,肿胀,有时会向外凸出很多,最常见于...
    多多爸阅读 486评论 0 0
  • 美好的事物,积极的事物,充满向上能量的事物,才是我们应该鼓励的。伟大的祖国,伟大的领导者,伟大的人民,亲爱的家人,...
    白流云阅读 218评论 0 1