Category: R

R语言下如何获得正确的文件编码

一个UTF-8的csv文件(可以在Windows下用notepad新建一个包含中文字符的文件,并在保存时编码选择UTF-8),在mac OS下读取没有任何问题, > read.csv("~/tmp/utf8.txt") 测试 <0 rows> (or 0-length row.names) 同样的代码,在Windows下报错, > read.csv("c:\\soft\\utf8.txt") Error in make.names(col.names, unique = TRUE) : invalid multibyte string 1 即使指定编码,输出仍然是乱码, > read.csv("c:\\soft\\utf8.txt",fileEncoding = "UTF-8") X.…

Read More

R语言mapply应用一例

需求:求data frame下两列有交集的元素个数,例如,m2和m3存储的都是以逗号分割的字符串,现在求m2和m3的交集, x1<-data.frame(m1=c(1,2,3),m2=c('f,a,b,c','edfc,avv,c','g,e,f,k') ,m3=c('--,c,b,d','--kr,edfc,avcv,ce','f,g,l,e,l,p') ,stringsAsFactors=F) 答案, x1$gg=mapply(function(x,y) length(intersect(strsplit(x,split=',')],strsplit(y,split=',')])), x1$m2, x1$m3)  

Read More

在Ubuntu下安装RPostgreSQL

在Windows上安装RPostgreSQL非常简单, install.packages("RPostgreSQL") 但同样都命令在Ubuntu(Linux)环境下就会遇到如下错误, checking for "/libpq-fe.h"... no configure: creating ./config.status config.status: creating src/Makevars gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG -I -fpic -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g -c RS-DBI.c -o…

Read More

Ubuntu下安装Rattle

Rattle是基于R的一款可视化挖掘工具,是众多知名R GUI的一个,这里介绍下Ubuntu下安装Rattle的注意事项, install.packages("rattle") * installing *source* package ‘RGtk2’ ... ** package ‘RGtk2’ successfully unpacked and MD5 sums checked checking for pkg-config... /usr/bin/pkg-config checking pkg-config is at least version 0.9.0... yes…

Read More

如何查找PostgreSQL库所有表的行数

今天使用R批量导入Excel数据到PostgreSQL,总共25个excel,导完后被告知有2个excel是一模一样的,但我导入的时候没有记录表名和excel名直接的关系,如何查找是哪两个表重复了呢? 网上找到一段代码,可以获得指定库下所有表的行数, SELECT schemaname,relname,n_live_tup FROM pg_stat_user_tables ORDER BY n_live_tup DESC; 结合我的表的前缀raw_2014_,轻松寻找到了2个行数一样的表, How do you find the row count for all your tables in Postgres SELECT schemaname,relname,n_live_tup FROM pg_stat_user_tables where relname…

Read More

在R中使用代理

这里不介绍如何获得代理服务器,这里只说下如何在R下翻墙, 设置Proxy Sys.setenv(http_proxy=”http://username:password@proxy_server:port″) 查看 Proxy Sys.getenv("http_proxy") 测试 url.exists("http://www.gogle.com") #或者看看你的IP对不对 readLines('http://api.ipify.org') 试试把internet.info设为0或者1会有怎么样的输出,如果是2呢? options(internet.info = 0) 试试quantmod library("quantmod") aapl_f<-getFinancials("AAPL",src="google",verbose=TRUE) head(AAPL.f) 取消 Proxy Sys.unsetenv(“http_proxy”)

Read More

用R读取MS SQLServer 的MDF文件

今天客户发了两个文件enjoy_interface.ldf 和enjoy_interface.mdf,从后缀可以看出是微软的SQL Server数据库文件,可我系统上并没有安装SQL Server或者Express。网上搜索了一番,发现至少需要SqlLocalDB 找到SqlLocalDB.exe的目录,默认是: C:\Program Files\Microsoft SQL Server\120\Tools\Binn 命令行下运行 SqlLocalDB -c enjoy_interface -s#创建并运行enjoy_interface实例 然后按图示创建DSN(注意选择SQL Server Native Client 11.0) 接下来就可以在R中使用我们创建的DSN了 library("RODBC") crs$odbc <- odbcConnect("localdb", believeNRows=TRUE) crs$odbc.tables <- sqlTables(crs$odbc)$TABLE_NAME crs$sale <-…

Read More

R与连接池

你能想到的,往往都有人帮你实现了,比如R下数据库连接池的问题,答案也是肯定的,而且是由大名顶顶RStudio来实现的,Object Pooling in R 这货不仅仅是数据库连接池,只是目前仅支持DBI罢了。 #devtools::install_github("rstudio/pool") library(pool) pool <- dbPool( drv = RMySQL::MySQL(), dbname = "shinydemo", host = "shiny-demo.csa7qlmguqrf.us-east-1.rds.amazonaws.com", username = "guest", password = "guest" ) dbGetQuery(pool, "SELECT * FROM…

Read More

将Excel导入PostgreSQL之PL/R版本

PostgreSQL官方支持PL/pgSQL,PL/Tcl,PL/Perl和PL/Python这几种过程语言。同时还支持一些第三方提供的过程语言,如PL/Java,PL/PHP,PL/Py,PL/R,PL/Ruby,PL/Scheme,PL/sh, PL/V8。 前文介绍了,R下实现读取Excel,并导入PostgreSQL,于是尝试把它封装成存储过程,失败。 网上遍寻答案,无果,后来偶然发现,R下还有另外一个PostgreSQL的读写包rpg,测试成功。 create or replace function xls2db(text,text, text) returns void as $$ library(readxl, quietly=TRUE) xls <- read_excel(arg1,col_names = TRUE, sheet=arg2) df =data.frame(xls) library(rpg) connect(dbname="steven", host="127.0.0.1", user="postgres") write_table(data.frame(df), arg3)…

Read More

将R的data.frame写入MySQL数据库

这里主要想纠正一个问题,就是关于含中文字符的data frame写入MySQL时,网上给的错误说法:不能用dbWriteTable函数!! 基本思路就是判断变量(列名)和数据是否为utf8编码,如果不是则转为utf8 data.frame则被转为data.table,一则偷懒,二则速度快 如果是csv,强烈推荐data.table的fread,快,无编码坑 #library(readxl, quietly=TRUE) #df <- data.frame(read_excel("d:\\data.xlsx",col_names = TRUE),stringsAsFactors=FALSE) #如果是文本文件或者CSV,建议使用data.table,好处是快,以及避免read_csv的各种编码坑 #connect MySQL library(RMySQL) con <- dbConnect(MySQL(),user="user", password="pwd",dbname="db" , host="mysql.yourhost.com" ,port=3306) library(stringi) toutf8<-function(x) { if (is.factor(x)) { x<-as.character(x)…

Read More