R--基本数据管理

创建新变量,在数据框中创建新的变量

mydata<-data.frame(x1=c(2,2,6,4),x2=c(3,4,2,8))

#创建新变量的第一种方法
mydata$sumx<-mydata$x1+mydata$x2
mydata$meanx<-(mydata$x1+mydata$x2)/2

#创建新变量的第二种方法
attach(mydata)
mydata$sumx=x1+x2
mydata$meanx=(x1+x2)/2
detach(mydata)

#创建新变量的第三种方法
mydata=transform(mydata,
                 sumx=x1+x2,
                 meanx=(x1+x2)/2)```

#创建leadership的数据框

manager<-seq(1,5,1)
date<-c("10/24/08","10/28/08","10/01/08","10/12/08","05/01/09")
country<-c("US","US","UK","UK","UK")
gender<-c("M","F","F","M","F")
age<-c(32,45,25,39,99)
q1<-c(5,3,3,3,2)
q2<-c(4,5,5,3,2)
q3<-c(5,2,5,4,1)
q4<-c(5,5,5,NA,2)
q5<-c(5,5,2,NA,1)

不让其自动将字符串转换为因子(名义型变量因子,有序型变量因子)

leadership<-data.frame(manager,date,country,gender,age,q1,q2,q3,q4,q5,stringsAsFactors = FALSE)```

变量的重编码,将age重编码为类别型变量

#先将99岁重编码为缺失值NA
leadership$age[leadership$age==99]<-NA
#within函数和with相似都是营造出一个可以随便使用数据框的环境,只是within可以修改数据框的值
leadership<-within(leadership,{
  agecat<-NA
  agecat[age>75]           <-"Elder"
  agecat[age>=55 & age<=75]<-"middle age"
  agecat[age<=55]          <-"young"
})```

#变量的重命名,三种方法

第一种,使用fix()函数手动去修改

fix(leadership)

第二种reshape包的rename()函数

library(reshape)

第二个参数使用向量表示要替换的列名

leadership<-rename(leadership,c(manager="managerID",date="testdate"))

第三种names()函数

显示该数据框的所有名称变量

names(leadership)

然后修改

names(leadership)[2]<-"date"
names(leadership)[6:10]<-c("item1","item2","item3","item4","item5")```

缺失值

y<-c(1,2,3,NA)
#检测函数,返回4个相同大小的对象,值为TRUE或者FALSE
is.na(y)
#重新编码某些值为缺失值
leadership$age[leadership$age == 99] <- NA
#在分析中排除缺失值
#数值函数中有na.rm=TRUE这一选项就可以去除缺失值使用剩下的值进行计算
x <- c(1,2,3,NA)
y <- sum(x,na.rm = TRUE)
#或者使用na.omit()函数移除有含有缺失值得那一行
leadership
newdata <- na.omit(leadership)
newdata```

#日期值

将不同的日期值进行转换,as.Date(x,format=""),默认是yyyy-mm-dd

mydates <- as.Date(c("2007-06-22","2004-02-13"))

使用另一种格式

strdates <- c("01/05/1965","08/16/1975")
dates <- as.Date(strdates,"%m/%d/%Y")

转化leadership,%y表示两位数的year,转化成标准的格式

myformat <- "%m/%d/%y"
leadership$date <- as.Date(leadership$date,myformat)

Sys.Date()返回当天的日期,date()返回当前的日期与时间

today <- Sys.Date()
nowtime <- date()

format()函数进行输出格式化,%B表示非缩写月份,%d表示数字表示的日期,%A表示非缩写星期名

format(today,format="%B %d %Y")
format(today,format="%A")

计算我已经度过了多少天

startdate <- as.Date("1994-06-22")
nowdate <- Sys.Date()
days <- nowdate - startdate
days

difftime()函数计算时间间隔,来格式化输出

difftime(nowdate,startdate,units = "weeks")

出生的时候是星期几

format(startdate,format="%A")

将日期转化为字符型变量

strDates <- as.character(dates)```

类型转换

#is.numeric(),is.character(),is.vector(),is.matrix(),is.factor(),is.data.frame(),is.logical()

#as.numeric(),as.character(),as.vector(),as.matrix(),as.factor(),as.data.frame(),as.logical()
#在使用if-then的控制流的时候,is.datatype()将很有用,然后as.datatype()进行类型转化```

#排序

在要排序的field前面加上-号就是以降序的方式排序

newdata <- leadership[order(-leadership$age),]
attach(leadership)

以age为优先排序,然后再以gender进行排序

order()函数返回排序后的索引值,因此leadership会根据这些行索引值重新排序后赋给newdata

newdata <- leadership[order(age,gender),]
newdata
detach(leadership)```

横向合并(添加列)

id <- c(1,2,3,4)
ch1 <- c(1,2,3,4)
ch2 <- c(5,6,7,8)
example1 <- data.frame(id,ch1,ch2)
id <- c(1,2,3,4)
ch3 <- c(12,34,56,78)
ch4 <- c(123,456,789,123)
example2 <- data.frame(id,ch3,ch4)
example1
example2
#直接合并,不需要公共索引的话,使用cbind()函数,为了正常工作,保证有相同行数,相同顺序排序
#total <- cbind(example1,example2)
total <- merge(example1,example2,by="id")```

#纵向合并(添加行)

id <- c(1,2,3,4)
ch1 <- c(1,2,3,4)
ch2 <- c(5,6,7,8)
example1 <- data.frame(id,ch1,ch2)
id <- c(1,2,3,4)
ch2 <- c(12,34,56,78)
ch1 <- c(123,456,789,123)
example2 <- data.frame(id,ch2,ch1)
total <- rbind(example1,example2)

要保证有相同的变量(列数),顺序可以不同```

选入变量

#数据框选择元素dataframe[row_indices,column_indices]
newdata <- leadership[,c(6:10)]
#选择6到10列的所有行
myvars <- c("q1","q2","q3","q4","q5")
newdata <- leadership[myvars]
#直接通过列名来选择列
myvars <- paste("q",1:5,sep = "")
newdata <- leadership[myvars]
#paste函数将前面两个向量中的值分别连接起来,返回1个字符型向量```

#丢弃变量

第一种方法

leadership中是q3,q4的将为真,返回一个逻辑向量

myvars <- names(leadership) %in% c("q3","q4")

将myvars这个逻辑向量取反,这样q3,q4为false,就会从leadership中丢弃

newdata <- leadership[!myvars]

第二种方法

newdata <- leadership[c(-8,-9)]

在某列的下标之前加一个减号,就会剔除这一列

第三种方法

leadership$q3 <- leadership$q4 <- NULL

将这两列设为NULL未定义```

选入行


#选择1-3行的所有列
newdata <- leadership[1:3,]
#which将给出向量值中为TRUE的下标
newdata <- leadership[which(leadership$gender == "M" & leadership$age > 30),]

attach(leadership)
newdata <- leadership[which(gender == "M" & age > 30),]
detach(leadership)

#查询时间
#先将数据框的时间转化为标准值,format模式匹配,加上双引号
leadership$date <- as.Date(leadership$date,"%m/%d/%y")
startdate <- as.Date("2009-01-01")
stopdate <- as.Date("2010-01-01")
newdata <- leadership[which(leadership$date >= startdate & leadership$date <= stopdate),]```

#subset()函数

第一个参数是数据框,第二个参数是列变量的逻辑,第三个参数是选择的列

newdata <- subset(leadership,age>=35 | age < 24,select = c(q1,q2,q3,q4))

并且select后面跟的参数,列名,不需要加引号

newdata <- subset(leadership,gender == "M" & age > 25,select = gender:q4)```

随机抽样sample()函数

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

推荐阅读更多精彩内容