这甚至可能!?!
我有一堆遗留报告需要导入数据库.但是,它们都是pdf格式.有没有R可以阅读pdf的软件包?或者我应该将其留给命令行工具?
报告是在excel中进行的,然后是pdfed,所以它们有规则的结构,但很多空白的"细胞".
提取句子字符串中最后一个单词的最优雅方法是什么?
句子不以"."结尾.单词由空格分隔.
sentence <- "The quick brown fox"
TheFunction(sentence)
Run Code Online (Sandbox Code Playgroud)
应该回归:"狐狸"
如果可以使用简单的解决方案,我不想使用包.如果存在基于包的简单解决方案,那也没关系.
鉴于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-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) 所以我试图制作一个条形宽度映射到变量的堆积条形图; 但我希望我的酒吧之间的间距保持不变.
有谁知道如何使条之间的间距恒定?
现在我有这个:
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) 为文档ggplot2的stat_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)并将显示环境中的对象,但在探索了这些对象之后,我没有看到任何类似于被描述为返回值的内容.
如果我有data.tables DT和neighbors:
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)
该y1从n对dIS e: …
如果我有一个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.它可以用虚拟变量来完成,但这看起来很令人讨厌......
如果我有一个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个.这可能吗?
给定的数据如下:
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".
是否有更好和/或更快的方法来创建这些新列?