R语言进行数据分析,大部分是将数据转化为数据框。数据框形式上是列表,本质上是矩阵。
zhuan_ye <- c('植物学','动物学','基因工程','发酵工程') xue_sheng <- c(全日制=30000, 非全日制=20000) # 带名称的数值向量 xue_yuan <- list(zhuan_ye=zhuan_ye,xue_sheng=xue_sheng) xue_yuan # $zhuan_ye # [1] "植物学" "动物学" "基因工程" "发酵工程" # # $xue_sheng # 全日制 非全日制 # 30000 20000 length(xue_yuan) # [1] 2 names(xue_yuan) # [1] "zhuan_ye" "xue_sheng" typeof(xue_yuan) # [1] "list"
xue_yuan$xue_sheng # 全日制 非全日制 # 30000 20000 xue_yuan$xue_sheng['全日制'] # 全日制 # 30000 sum(xue_yuan$xue_sheng) # [1] 50000 # 通过[] 访问 xue_yuan[2] # 单个的[], 看到的依然是包装箱 # $xue_sheng #全日制 非全日制 # 30000 20000 typeof(xue_yuan[2]) # [1] "list" typeof(xue_yuan[[2]]) # [1] "double" typeof(xue_sheng) # [1] "double" sum(xue_yuan[[2]]) # [1] 50000 xue_yuan["xue_sheng"] # $xue_sheng # 全日制 非全日制 # 30000 20000 xue_yuan[['xue_sheng']] # 全日制 非全日制 # 30000 20000
xue_yuan$gender <- c(Male=30000,Female=20000) length(xue_yuan) # [1] 3 names(xue_yuan) # [1] "zhuan_ye" "xue_sheng" "gender" xue_yuan$gender <- NULL # 删除 names(xue_yuan) # [1] "zhuan_ye" "xue_sheng" unlist(lapply(xue_yuan, length)) sapply(xue_yuan, length) # zhuan_ye xue_sheng # 4 2 sapply(xue_yuan, typeof) # zhuan_ye xue_sheng # "character" "double"
xm <- c('张三','李四','王五','刘备') xb <- factor(c('女','男','男','男')) yw <- c(97,98,96,85) sx <- c(96,85,93,91) cjb <- data.frame(xm=xm,xb=xb,yw=yw,sx=sx) cjb # xm xb yw sx # 1 张三 女 97 96 # 2 李四 男 98 85 # 3 王五 男 96 93 # 4 刘备 男 85 91
# 子集访问 cjb$yw cjb[["yw"]] cjb[[3]] # [1] 97 98 96 85 cjb[1,] # 访问第一行 # xm xb yw sx # 1 张三 女 97 96 cjb[c(1,3),c("yw","xm")] # yw xm # 1 97 张三 # 3 96 王五 cjb[1:3,-1] # xb yw sx # 1 女 97 96 # 2 男 98 85 # 3 男 96 93 cjb <-cbind(cjb,ls=c(98,98,95,96)) cjb # xm xb yw sx ls # 1 张三 女 97 96 98 # 2 李四 男 98 85 98 # 3 王五 男 96 93 95 # 4 刘备 男 85 91 96
测试数据
cjb <- read.csv("/home/wy/Downloads/cjb.csv", header = TRUE, stringsAsFactors = FALSE, fileEncoding = "UTF-8") View(cjb) head(cjb) tail(cjb,n=3) str(cjb) # structure # 'data.frame': 775 obs. of 13 variables: # $ xm : chr "周黎" "汤海明" "舒江辉" "翁柯" ... # $ bj : int 1101 1101 1101 1101 1101 1101 1101 1101 1101 1101 ... # $ xb : chr "女" "男" "男" "女" ... # $ yw : int 94 87 92 91 85 92 88 81 88 94 ... # $ sx : int 82 94 79 84 92 82 72 89 77 81 ... # $ wy : int 96 89 86 96 82 85 86 87 95 88 ... # $ zz : int 97 95 98 93 93 91 94 97 94 91 ... # $ ls : int 97 94 95 97 87 90 87 94 84 85 ... # $ dl : int 98 94 96 94 88 92 88 96 94 98 ... # $ wl : int 95 90 89 82 95 82 89 81 87 81 ... # $ hx : int 94 90 94 90 94 98 98 88 94 88 ... # $ sw : int 88 89 87 83 93 90 94 83 82 88 ... # $ wlfk: chr "文科" "文科" "文科" "文科" ... summary(cjb) names(cjb) # [1] "xm" "bj" "xb" "yw" "sx" "wy" "zz" "ls" "dl" # [10] "wl" "hx" "sw" "wlfk" colnames(cjb) # 同上 nrow(cjb) # [1] 775 ncol(cjb) # [1] 13 length(cjb) # [1] 13 cjb$bj <- factor(cjb$bj) # 转换为因子 cjb$xb <- factor(cjb$xb) summary(cjb) # 查看是否为因子 cjb$zcj <- apply(cjb[,4:12],1,sum) # 新增加一列总成绩 1表示按行进行操作 order_zcj <- order(cjb$zcj,decreasing = TRUE)[1:5] cjb[order_zcj,] # 按照总成绩从高到低排序
set.seed(2012) n_record <- nrow(cjb) # [1] 775 # 从1-775取70%训练集的下标 train_idx <- sample(1:n_record,floor(n_record*0.7)) train_idx <- sample(n_record,n_record*0.7) # 两个集合的 在A里不在B里 length(train_idx)# [1] 542 test_idx <- (1:n_record)[-train_idx] # 获取测试集下标 test_idx <- setdiff(1:n_record,train_idx) length(test_idx) # [1] 233 cjb[train_idx,] cjb[-train_idx,] cjb[test_idx,]
注意:训练集和测试集不应该有交集