R基本数据管理--数据集合并、子集的提取以及随机抽样函数
2018-08-09 本文已影响167人
天秤座的机器狗
#R基本数据管理--数据集合并、子集的提取以及随机抽样函数
x <- matrix(c(1,2,3,4,5,6,7,8,9),nrow = 3,ncol=3)
x
#[,1] [,2] [,3]
#[1,] 1 4 7
#[2,] 2 5 8
#[3,] 3 6 9
y <- x
z <- cbind(x,y) #按列合并x和y两个数据集
z
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] 1 4 7 1 4 7
#[2,] 2 5 8 2 5 8
#[3,] 3 6 9 3 6 9
a <- data.frame(k1 = c(NA,NA,3,4,5), k2 = c(1,NA,NA,4,5), data = 1:5)
a
#k1 k2 data
#1 NA 1 1
#2 NA NA 2
#3 3 NA 3
#4 4 4 4
#5 5 5 5
b <- data.frame(k1 = c(NA,2,NA,4,5), k2 = c(NA,NA,3,4,5), data = 1:5)
b
#k1 k2 data
#1 NA NA 1
#2 2 NA 2
#3 NA 3 3
#4 4 4 4
#5 5 5 5
c <- merge(a,b,by="k1") #merge 也是一种合并,但和cbind不同,如左,如果是按k1合并,则对a而言
#第一行,NA 1 1,中k1值是NA ,对应b能找到第一行和第3行,所以,c中3,4行的内容shi
# NA 1 1 NA 1 和 NA 1 1 3 3 前3列对应a。 1,4,5列对应b,以此类推。
c
#k1 k2.x data.x k2.y data.y
#1 4 4 4 4 4
#2 5 5 5 5 5
#3 NA 1 1 NA 1
#4 NA 1 1 3 3
#5 NA NA 2 NA 1
#6 NA NA 2 3 3
z1 <- rbind (x,y) #行合并
z1
#[,1] [,2] [,3]
#[1,] 1 4 7
#[2,] 2 5 8
#[3,] 3 6 9
#[4,] 1 4 7
#[5,] 2 5 8
#[6,] 3 6 9
#子集的提取
manager <- c(1,2,3,4,5)
date <- c("8/1/18","8/2/18","8/3/18","8/4/18","8/5/18")
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)
survey <- data.frame(manager,date,country,gender,age,q1,q2,q3,q4,q5,stringsAsFactors = FALSE)
# manager date country gender age q1 q2 q3 q4 q5
# 1 1 8/1/18 US M 32 5 4 5 5 5
# 2 2 8/2/18 US F 45 3 5 2 5 5
# 3 3 8/3/18 UK F 25 3 5 5 5 2
# 4 4 8/4/18 UK M 39 3 3 4 NA NA
# 5 5 8/5/18 UK F 99 2 2 1 2 1
# ps:Rstudio 按ctrl+shift+C 可以多行注释
q <- survey[,6:10] #获取数据集中的6-10列
q
# q1 q2 q3 q4 q5
# 1 5 4 5 5 5
# 2 3 5 2 5 5
# 3 3 5 5 5 2
# 4 3 3 4 NA NA
# 5 2 2 1 2 1
x <- survey[,-2] #删除第2列date列
x
# manager country gender age q1 q2 q3 q4 q5
# 1 1 US M 32 5 4 5 5 5
# 2 2 US F 45 3 5 2 5 5
# 3 3 UK F 25 3 5 5 5 2
# 4 4 UK M 39 3 3 4 NA NA
# 5 5 UK F 99 2 2 1 2 1
newdata <- subset(survey,age>34|age<34,select = c(q1,q2,q3,q4)) #subset函数,对survey,选取age大于34或小于24,
#选取数据列是q1,q2,q3,q4
newdata
# q1 q2 q3 q4
# 1 5 4 5 5
# 2 3 5 2 5
# 3 3 5 5 5
# 4 3 3 4 NA
# 5 2 2 1 2
#随机抽样
# sample(x, size, replace = FALSE, prob = NULL) x可以是任何对象,
# size规定了从对象中抽出多少个数,size应该小于x的规模,否则会报错
# replace默认是F,表示每次抽取后的数就不能在下一次被抽取;T表示抽取过的数可以继续拿来被抽取
mysample <- survey[sample(5,3,replace = FALSE),] #随机获取3行
mysample
# manager date country gender age q1 q2 q3 q4 q5
# 2 2 8/2/18 US F 45 3 5 2 5 5
# 5 5 8/5/18 UK F 99 2 2 1 2 1
# 4 4 8/4/18 UK M 39 3 3 4 NA NA