小编Jus*_*tin的帖子

将PDF文件中的数据读入R中

这甚至可能!?!

我有一堆遗留报告需要导入数据库.但是,它们都是pdf格式.有没有R可以阅读pdf的软件包?或者我应该将其留给命令行工具?

报告是在excel中进行的,然后是pdfed,所以它们有规则的结构,但很多空白的"细胞".

linux pdf r pdf-scraping scrape

49
推荐指数
4
解决办法
2万
查看次数

在R中提取字符串中的最后一个单词

提取句子字符串中最后一个单词的最优雅方法是什么?

句子不以"."结尾.单词由空格分隔.

sentence <- "The quick brown fox"
TheFunction(sentence)
Run Code Online (Sandbox Code Playgroud)

应该回归:"狐狸"

如果可以使用简单的解决方案,我不想使用包.如果存在基于包的简单解决方案,那也没关系.

r

25
推荐指数
5
解决办法
3万
查看次数

从data.table到eval的函数创建表达式

鉴于data.tabledat:

dat <- data.table(x_one=1:10, x_two=1:10, y_one=1:10, y_two=1:10) 
Run Code Online (Sandbox Code Playgroud)

我想要一个函数,它在两个相似的行之间创建一个表达式,给出它们的"根"名称,例如x_one - x_two.

myfun <- function(name) {
  one <- paste0(name, '_one')
  two <- paste0(name, '_two')

  parse(text=paste(one, '-', two))
}
Run Code Online (Sandbox Code Playgroud)

现在,只使用一个根名称可以按预期工作,并生成一个向量.

dat[, eval(myfun('x')),]

[1] 0 0 0 0 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

但是,尝试使用该list技术为该输出分配名称失败:

dat[, list(x_out = eval(myfun('x'))),]

Error in eval(expr, envir, enclos) : object 'x_one' not found
Run Code Online (Sandbox Code Playgroud)

我可以通过添加一个"解决"这个with(dat, ...),但是这几乎是data.table十岁上下

dat[, list(x_out = with(dat, eval(myfun('x'))),
           y_out = with(dat, eval(myfun('y')))),]

    x_out y_out
 1:     0     0
 2: …
Run Code Online (Sandbox Code Playgroud)

r data.table

23
推荐指数
1
解决办法
4138
查看次数

通过完美的方形对订购1:17

关于R-help有一个有趣的问题:

"把数字一到17.你能把它们写成一行,这样每一对数字彼此相邻,加上一个正方形数字吗?"

我的解决方案如下,并不是特别特别.我对更优雅和/或更强大的解决方案感到好奇.也许一个解决方案,可以采取任意数字串,并尽可能订购这样的数字?

sq.test <- function(a, b) {
  ## test for number pairs that sum to squares.
  sqrt(sum(a, b)) == floor(sqrt(sum(a, b)))
}

ok.pairs <- function(n, vec) {
  ## given n as a member of vec,
  ## which other members of vec satisfiy sq.test
  vec <- vec[vec!=n]
  vec[sapply(vec, sq.test, b=n)]
}

grow.seq <- function(y) {
  ## given a starting point (y) and a pairs list (pl)
  ## grow the squaring sequence.
  ly <- length(y)
  if(ly == y[1]) return(y)

  ## this …
Run Code Online (Sandbox Code Playgroud)

r

14
推荐指数
1
解决办法
1890
查看次数

ggplot2中的条形图,宽度为变量,条形间的间距均匀

所以我试图制作一个条形宽度映射到变量的堆积条形图; 但我希望我的酒吧之间的间距保持不变.

有谁知道如何使条之间的间距恒定?

现在我有这个:

p<-ggplot(dd, aes(variable, value.y, fill=Date, width=value.x / 15))+ coord_flip() + opts(ylab="") 

p1<-p+ geom_bar(stat="identity") + scale_fill_brewer(palette="Dark2") + scale_fill_hue(l=55,c=55)

p2<-p1 + opts(axis.title.x = theme_blank(), axis.title.y = theme_blank())

p2
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

提前致谢.

顺便说一句,这是我的数据(对于冗长,庞大的输入而言,这是抱歉的):

> dput(dd)
structure(list(variable = structure(c(1L, 1L, 1L, 1L, 1L, 3L, 
3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 7L, 7L, 7L, 7L, 7L, 2L, 2L, 
2L, 2L, 2L, 6L, 6L, 6L, 6L, 6L, 5L, 5L, 5L, 5L, 5L, 9L, 9L, 9L, 
9L, 9L, 8L, 8L, 8L, 8L, 8L), …
Run Code Online (Sandbox Code Playgroud)

plot r graph ggplot2

11
推荐指数
2
解决办法
5144
查看次数

ggplot2返回值

为文档ggplot2stat_bin功能说,它返回与其他列新的数据帧.如何实际访问此数据框?

可能吗?

simple <- data.frame(x = rep(1:10, each = 2))
tmp <- stat_bin(data=simple, binwidth=0.1, aes(x))
Run Code Online (Sandbox Code Playgroud)

我已经发现这tmp是一个环境,ls(tmp)并将显示环境中的对象,但在探索了这些对象之后,我没有看到任何类似于被描述为返回值的内容.

r ggplot2

10
推荐指数
2
解决办法
1048
查看次数

在引用查找之后将data.table与自身合并

如果我有data.tables DTneighbors:

set.seed(1)
library(data.table)
DT <- data.table(idx=rep(1:10, each=5), x=rnorm(50), y=letters[1:5], ok=rbinom(50, 1, 0.90))
n <- data.table(y=letters[1:5], y1=letters[c(2:5,1)])
Run Code Online (Sandbox Code Playgroud)

n是一个查找表.无论何时ok == 0,我想查找相应的y1in n并使用该值x和给定的值idx.举例来说,DT的第4行:

> DT
   idx          x y ok
1:   1 -0.6264538 a  1
2:   1  0.1836433 b  1
3:   1 -0.8356286 c  1
4:   1  1.5952808 d  0
5:   1  0.3295078 e  1
6:   2 -0.8204684 a  1
Run Code Online (Sandbox Code Playgroud)

y1ndIS e: …

r data.table

10
推荐指数
1
解决办法
1119
查看次数

在data.table中从`j`中访问`by`变量

如果我有一个data.table并且我正在进行一些函数调用j,我是否可以访问by变量的当前值?

library(data.table)
d <- data.table(x=1:10, y=c('a', 'b'))

myfun <- function(DT) {
  print (DT$y)
}


d[, myfun(.SD), by=y]
Run Code Online (Sandbox Code Playgroud)

对于更多上下文,我传递第二个参数(另一个data.table)myfun并且想要基于当前值的子集y.它可以用虚拟变量来完成,但这看起来很令人讨厌......

r data.table

8
推荐指数
1
解决办法
566
查看次数

使用facet_wrap修复了"数字"图

如果我有一个data.frame dat并想使用facet_wrap以下方法绘制数据组:

dat <- data.frame(x = runif(150), y = runif(150), z = letters[1:15])

ggplot(dat[dat$z %in% letters[1:9], ], aes(x, y)) +
  geom_point() +
  facet_wrap( ~ z, ncol = 3, nrow = 3)
Run Code Online (Sandbox Code Playgroud)

这看起来很棒并且按预期执行.但是,如果我z在新情节上绘制下一组:

ggplot(dat[dat$z %in% letters[10:15], ], aes(x, y)) +
  geom_point() +
  facet_wrap( ~ z, ncol = 3, nrow = 3)
Run Code Online (Sandbox Code Playgroud)

我不再有3行3列.我可以修复使用的情节长宽比,opts(aspect.ratio = 1)但我仍然将它们的布局与我之前的情节不同.我希望它看起来好像页面上总共有9个图,即使有6个或1个.这可能吗?

r ggplot2

7
推荐指数
1
解决办法
929
查看次数

将factor列转换为多个布尔列

给定的数据如下:

library(data.table)
DT <- data.table(x=rep(1:5, 2))
Run Code Online (Sandbox Code Playgroud)

我想将这些数据拆分为5个布尔列,指示每个数字的存在.

我可以这样做:

new.names <- sort(unique(DT$x))

DT[, paste0('col', new.names) := lapply(new.names, function(i) DT$x==i), with=FALSE]
Run Code Online (Sandbox Code Playgroud)

但是这使用了一个lapply比data.table替代方案慢的麻烦,这个解决方案让我觉得不是很"data.table-ish".

是否有更好和/或更快的方法来创建这些新列?

r data.table

7
推荐指数
1
解决办法
1378
查看次数

标签 统计

r ×10

data.table ×4

ggplot2 ×3

graph ×1

linux ×1

pdf ×1

pdf-scraping ×1

plot ×1

scrape ×1