数据科学与R语言数据-R语言-图表-决策-Linux-Python

R in action 第四章 学习笔记

2019-06-07  本文已影响1人  Jason数据分析生信教室

第四章 基本数据管理

0605 22:27 晴

Dataframe基本操作

manager <- c(1,2,3,4,5)
date <- c("10/24/08","10/28/08","10/1/08","10/12/08","5/1/09")
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,gender,age,q1,q2,q3,q4,q5, 
                        stringsAsFactors=FALSE)  
#stringsAsFactors=F 很重要,防止自动把字符转换成factor
                        
leadership$agecat[leadership$age == 99]<-NA
leadership$agecat[leadership$age > 75]<-"Elder"
leadership$agecat[leadership$age >= 55 & 
                 leadership$age <= 75]<- "Middle"
leadership$agecat[leadership$age <55]<- "Young"

以上操作可以被within( ) 替代

leadership<-within(leadership,{
                    agecat<-NA
                    agecat[age>75]<-"Elder"
                    agecat[age>=55 & age<=75]<-"Middle Aged"
                    agecat[age<55]<-"Young"})
> names(leadership) # 变量名,当然也可以重新编码
 [1] "manager" "date"    "gender"  "age"     "q1"      "q2"      "q3"      "q4"      "q5"      "agecat" 

改变变量名

names( )

> names(leadership)
[1] "manager" "date"    "gender"  "age"     "q1"      "q2"      "q3"      "q4"      "q5"     
> names(leadership)[2] <- "testDate"
> leadership
  manager testDate gender age q1 q2 q3 q4 q5
1       1 10/24/08      M  32  5  4  5  5  5
2       2 10/28/08      F  45  3  5  2  5  5
3       3  10/1/08      F  25  3  5  5  5  2
4       4 10/12/08      M  39  3  3  4 NA NA
5       5   5/1/09      F  99  2  2  1  2  1
> 

缺省值基本操作

> is.na(leadership[, 5:9])
        q1    q2    q3    q4    q5
[1,] FALSE FALSE FALSE FALSE FALSE
[2,] FALSE FALSE FALSE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE FALSE
[4,] FALSE FALSE FALSE  TRUE  TRUE
[5,] FALSE FALSE FALSE FALSE FALSE
leadership[age == 99, "age"] <- NA
# or leadership$age[leadership$age == 99]<-NA
> x <- c(1, 2, NA, 3)
> y <- x[1] + x[2] + x[3] + x[4]
> z <- sum(x)
> y
[1] NA
> z
[1] NA
> x <- c(1, 2, NA, 3)
> y <- sum(x, na.rm=TRUE)
> y
[1] 6
> newdata <- na.omit(leadership)
> newdata
  manager testDate gender age q1 q2 q3 q4 q5 agecat
1       1 10/24/08      M  32  5  4  5  5  5  Young
2       2 10/28/08      F  45  3  5  2  5  5  Young
3       3  10/1/08      F  25  3  5  5  5  2  Young
5       5   5/1/09      F  99  2  2  1  2  1  Elder

时间日期的基本操作

startdate <- as.Date("2004-02-13")
enddate   <- as.Date("2009-06-22")
enddate - startdate
today <- Sys.Date()
dob <- as.Date("1956-10-12")
difftime(today, dob, units="weeks")

数据排序

> newdata <- leadership[order(leadership$age),]
> newdata
  manager testDate gender age q1 q2 q3 q4 q5 agecat
3       3  10/1/08      F  25  3  5  5  5  2  Young
1       1 10/24/08      M  32  5  4  5  5  5  Young
4       4 10/12/08      M  39  3  3  4 NA NA  Young
2       2 10/28/08      F  45  3  5  2  5  5  Young
5       5   5/1/09      F  99  2  2  1  2  1  Elder

数据框合并

total <- merge(dataframeA, dataframeB, by="ID")
total <- cbind(A, B)  #横向合并
total <- rbind(dataframeA, dataframeB)
 #纵向合并,必须要有相同的变量,如果没有,就需要删除多余变量或者添加NA

数据集子集

myvars <- names(leadership) %in% c("q3", "q4")
newdata <- leadership[!myvars]

短短的两条代码,目的很简单,但逻辑上需要绕一下。

  1. 选择了leadership的变量名
  2. %in%提取其中的 "q3","q4"变量
    综合1,2就是把变量名“q3","q4"编制成myvars
  3. 把不含myvars也就是“q3","q4"变量的数据重新整合成一个新的数据newdata

举一反三: 删除列是这样的,删除行怎么办呢
names( ) 换成 rownames( ) 就OK了

其他办法

leadership$q3 <- leadership$q4 <- NULL
leadership$date <- as.Date(leadership$date, "%m/%d/%y")
startdate <- as.Date("2009-01-01")
enddate <- as.Date("2009-10-31")
newdata <- leadership[which(leadership$date >= startdate &
                    leadership$date <= enddate),]

需要经常使用这个函数,还是比较便利的

newdata <- subset(leadership, age >= 35 | age < 24,
                 select=c(q1, q2, q3, q4))
newdata <- subset(leadership, gender=="M" & age > 25,
                 select=gender:q4))
mysample <- leadership[sample(1:nrow(leadership), 3, replace=FALSE),]

以上
0606 16:49

上一篇下一篇

猜你喜欢

热点阅读