R | 常用函数-1

1 读入数据

针对不同的数据格式,有不同的数据读取方法

1.1 csv格式

  • 针对csv文件,直接read_csv。
  • 注意fileEncoding是说编码,win系统下为GBK,更常见的是utf-8。
  • stringsAsFactors = F是个很好用的技巧,避免后面为因子型变量去麻烦。
house = read.csv("./data/二手房.csv",fileEncoding = "GBK",stringsAsFactors = F)
head(house)
CATEbedroomshallsAREAfloorsubwayschoolpriceLONGLATNAMEDISTRICT
chaoyang 1 0 46.06 middle 1 0 4.8850 116.4597 39.92835 10AM新坐标方庄
chaoyang 1 1 59.09 middle 1 0 4.6540 116.4597 39.92835 10AM新坐标方庄
haidian 5 2 278.95 high 1 1 7.1662 116.3036 39.95481 10号名邸 紫竹桥
haidian 3 2 207.00 high 1 1 5.7972 116.3036 39.95481 10号名邸 紫竹桥
fengtai 2 1 53.32 low 1 1 7.1268 116.4188 39.94381 17号旁门 蒲黄榆
fengtai 2 1 58.00 low 1 1 7.0690 116.4188 39.94381 17号旁门 蒲黄榆

1.2 xlsx格式

  • 针对xls或者xlsx文件,需要先导入一个包:readxl
  • 然后用函数read_excel
library(readxl)
movie2=read_excel("./data/电影数据.xlsx")
tail(movie2)
nameboxofficedoubanscoretypedurationshowtimedirectorstar1index1star2index2
大唐玄奘 3271.44 5.1 剧情 90 2016/4/29 霍建起 黄晓明 32595 徐峥 10318
我的特工爷爷32009.37 5.3 动作 99 2016/4/1 洪金宝 洪金宝 9148 刘德华 30277
火锅英雄 36624.84 7.3 犯罪 95 2016/4/1 杨庆 陈坤 5763 白百何 10585
百鸟朝凤 8686.14 8.0 剧情 108 2016/5/6 吴天明 陶泽如 1139 李岷城 3290
夜孔雀 3260.42 4.7 爱情 84 2016/5/20 戴思杰 刘亦菲 58355 刘烨 11248
钢刀 924.86 4.3 动作 94 2016/5/20 阿甘 何润东 11822 李学东 521

1.3 txt文件

针对txt文件,要考虑两种情况:数据为结构化的还是非结构化的。

  • 结构化:指txt中已经是很规范的数据,类似DataFrame,则直接read_table
movie = read.table("./data/电影.txt", header = TRUE) # 编码是utf-8的
head(movie)
nameboxofficedoubanscoretypedurationshowtimedirectorstar1index1star2index2
叶问3 77060.44 6.4 动作 105 2016/3/4 叶伟信 甄子丹 11385 张晋 4105
美人鱼 338583.26 6.9 喜剧 93 2016/2/8 周星驰 邓超 41310 林允 9292
女汉子真爱公式 6184.45 4.5 喜剧 93 2016/3/18 郭大雷 赵丽颖 181979 张翰 44277
西游记之孙悟空三打白骨精119956.51 5.7 喜剧 120 2016/2/8 郑保瑞 郭富城 12227 巩俐 8546
澳门风云三 111693.89 4.0 喜剧 112 2016/2/8 王晶 周润发 16731 刘德华 30277
功夫熊猫3 99832.53 7.7 喜剧 95 2016/1/29 吕寅荣 杰克布莱克 178 安吉丽娜朱莉 1540
  • 非结构化:通常是文本数据,这样直接就readlines 按行读取
yitian=readLines("./data/倚天屠龙记.txt")
head(yitian)
  1. ' 一  天涯思君不可忘'
  2. ' “春游浩荡,是年年寒食,梨花时节。白锦无纹香烂漫,玉树琼苞堆雪。静夜沉沉,'
  3. '浮光霭霭,冷浸溶溶月。人间天上,烂银霞照通彻。浑似姑射真人,天姿灵秀,意气殊高'
  4. '洁。万蕊参差谁信道,不与群芳同列。浩气清英,仙才卓荦,下土难分别。瑶台归去,洞'
  5. '天方看清绝。”'
  6. ' 作这一首《无俗念》词的,乃南宋末年一位武学名家,有道之士。此人姓丘,名处机'

2 好用的函数

2.1 revalue函数

  • 就是需要把多个类别合并 不用写逻辑语句了 直接revalue一下
df = movie
table(df$type)
剧情 动作 喜剧 爱情 犯罪 
   3    4    8    3    1 
# 例子1
# install.packages('dplyr')
# library(dplyr)
df$type <- revalue(df$type,
                   c('剧情' = '真-剧情', '动作' = '真-动作',
                     '喜剧' = '真-喜剧', '爱情' = '真-爱情',
                                 ,'犯罪' = '真-犯罪'))
head(df)

2.2 rep函数

  • 重复某一个值
# 例子2
# 还是打标签,不过这次是没有标签的时候 上面是标签都有了需要去汇总整理——使用rep函数
df["diff_type"] <- rep("正常电影", dim(df)[1])
head(df)
nameboxofficedoubanscoretypedurationshowtimedirectorstar1index1star2index2diff_type
叶问3 77060.44 6.4 动作 105 2016/3/4 叶伟信 甄子丹 11385 张晋 4105 正常电影
美人鱼 338583.26 6.9 喜剧 93 2016/2/8 周星驰 邓超 41310 林允 9292 正常电影
女汉子真爱公式 6184.45 4.5 喜剧 93 2016/3/18 郭大雷 赵丽颖 181979 张翰 44277 正常电影
西游记之孙悟空三打白骨精119956.51 5.7 喜剧 120 2016/2/8 郑保瑞 郭富城 12227 巩俐 8546 正常电影
澳门风云三 111693.89 4.0 喜剧 112 2016/2/8 王晶 周润发 16731 刘德华 30277 正常电影
功夫熊猫3 99832.53 7.7 喜剧 95 2016/1/29 吕寅荣 杰克布莱克 178 安吉丽娜朱莉 1540 正常电影

2.3 ifelse函数

  • 对某一列数据进行处理的时候,需要二值化,如果值为空或者大于小于等于某个值则为多少,否则为多少。
table(df$type)
df$type <- ifelse(df$type == '', '缺失',
                           df$type)
head(df)
  • 对于ifelse 自己还写了一个加强版的:即多值化的方法。
  • 【补充知识】dim(data)返回data的行和列 dim(data)[1]为行
for(i in 1:dim(df)[1])
{
  if(nchar(df[i,8])==16){
    df[i,8] = '信用卡'
  }else if (nchar(df[i,8])>=17 && nchar(df[i,8])<=19){
    df[i,8] = '借记卡'
  } else if (nchar(df[i,8])<16 | nchar(df[i,8])>19){
    df[i,8] = '其他'
  }
}

总结:

  • nchar函数是统计字符的个数 8表示相应的列
  • &&表示且 而|表示或

2.4 mode函数

  • 查看变量的类型
mode(df$doubanscore)

‘numeric’

2.5 cut函数

  • 对一个变量进行切割分组,特别是数值型变量,有个好用的函数
df$doubanscore <- cut(df$doubanscore, 
                             breaks = c(0, 5, 7, max(df$doubanscore)),
                             labels = c('<5', '5-7', '>=7'))
head(df)
nameboxofficedoubanscoretypedurationshowtimedirectorstar1index1star2index2diff_type
叶问3 77060.44 5-7 动作 105 2016/3/4 叶伟信 甄子丹 11385 张晋 4105 正常电影
美人鱼 338583.26 5-7 喜剧 93 2016/2/8 周星驰 邓超 41310 林允 9292 正常电影
女汉子真爱公式 6184.45 <5 喜剧 93 2016/3/18 郭大雷 赵丽颖 181979 张翰 44277 正常电影
西游记之孙悟空三打白骨精119956.51 5-7 喜剧 120 2016/2/8 郑保瑞 郭富城 12227 巩俐 8546 正常电影
澳门风云三 111693.89 <5 喜剧 112 2016/2/8 王晶 周润发 16731 刘德华 30277 正常电影
功夫熊猫3 99832.53 >=7 喜剧 95 2016/1/29 吕寅荣 杰克布莱克 178 安吉丽娜朱莉 1540 正常电影

2.6 aggerate函数

  • 分组统计
# 计算不同类型电影的票房中位数
df_cal <- aggregate(df$boxoffice, by = list(type = df$type), median)
df_cal
typex
剧情 8058.15
动作 18135.76
喜剧 89086.96
爱情 12561.55
犯罪 36624.84

2.7 detach函数

卸载包

detach("package:ipred")

2.8 重命名函数

  • 对数据框列名重新命名
colnames(df)[1] <- 'movie_name'
head(df)
movie_nameboxofficedoubanscoretypedurationshowtimedirectorstar1index1star2index2diff_type
叶问3 77060.44 5-7 动作 105 2016/3/4 叶伟信 甄子丹 11385 张晋 4105 正常电影
美人鱼 338583.26 5-7 喜剧 93 2016/2/8 周星驰 邓超 41310 林允 9292 正常电影
女汉子真爱公式 6184.45 <5 喜剧 93 2016/3/18 郭大雷 赵丽颖 181979 张翰 44277 正常电影
西游记之孙悟空三打白骨精119956.51 5-7 喜剧 120 2016/2/8 郑保瑞 郭富城 12227 巩俐 8546 正常电影
澳门风云三 111693.89 <5 喜剧 112 2016/2/8 王晶 周润发 16731 刘德华 30277 正常电影
功夫熊猫3 99832.53 >=7 喜剧 95 2016/1/29 吕寅荣 杰克布莱克 178 安吉丽娜朱莉 1540 正常电影

2.9 round函数

  • 保留小数点的位数
# 法1
df$boxoffice <- round(df$boxoffice, 1)
head(df)
movie_nameboxofficedoubanscoretypedurationshowtimedirectorstar1index1star2index2diff_type
叶问3 77060.4 5-7 动作 105 2016/3/4 叶伟信 甄子丹 11385 张晋 4105 正常电影
美人鱼 338583.3 5-7 喜剧 93 2016/2/8 周星驰 邓超 41310 林允 9292 正常电影
女汉子真爱公式 6184.4 <5 喜剧 93 2016/3/18 郭大雷 赵丽颖 181979 张翰 44277 正常电影
西游记之孙悟空三打白骨精119956.5 5-7 喜剧 120 2016/2/8 郑保瑞 郭富城 12227 巩俐 8546 正常电影
澳门风云三 111693.9 <5 喜剧 112 2016/2/8 王晶 周润发 16731 刘德华 30277 正常电影
功夫熊猫3 99832.5 >=7 喜剧 95 2016/1/29 吕寅荣 杰克布莱克 178 安吉丽娜朱莉 1540 正常电影

2.10 %>%函数

  • 管道操作符
ratio2 <- aggregate(df$boxoffice, by = list(type = df$type), median) %>% as.data.frame()
ratio2
typex
剧情 8058.1
动作 18135.8
喜剧 89086.9
爱情 12561.5
犯罪 36624.8
top10_refuse <- table(df$type) %>% as.data.frame()
top10_refuse
Var1Freq
剧情3
动作4
喜剧8
爱情3
犯罪1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值