小编Hug*_*ugh的帖子

为什么pandas在python中的合并速度比2012年R中的data.table合并更快?

我最近遇到了python 的pandas库,根据这个基准测试执行非常快速的内存中合并.它甚至比R中的data.table包更快(我选择用于分析的语言).

为什么pandas这么快data.table?是因为python具有超过R的固有速度优势,还是有一些我不知道的权衡?有没有办法在data.table不诉诸merge(X, Y, all=FALSE)和执行内部和外部联接的情况下merge(X, Y, all=TRUE)

对照

这是用于对各种包进行基准测试的R代码Python代码.

python join r pandas data.table

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

在线的末端绘制标签

我有以下数据(temp.dat请参阅完整数据的结束注释)

   Year State     Capex
1  2003   VIC  5.356415
2  2004   VIC  5.765232
3  2005   VIC  5.247276
4  2006   VIC  5.579882
5  2007   VIC  5.142464
...
Run Code Online (Sandbox Code Playgroud)

我可以生成以下图表:

ggplot(temp.dat) + 
  geom_line(aes(x = Year, y = Capex, group = State, colour = State))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

而不是传说,我喜欢标签

  1. 颜色与系列相同
  2. 每个系列的最后一个数据点的右侧

我在以下链接的答案中注意到了baptiste的评论,但是当我尝试调整他的代码(geom_text(aes(label = State, colour = State, x = Inf, y = Capex), hjust = -1))时,文本没有出现.

ggplot2 - 在剧情之外注释

temp.dat <- structure(list(Year = c("2003", "2004", "2005", "2006", "2007", 
"2008", "2009", "2010", "2011", "2012", "2013", …
Run Code Online (Sandbox Code Playgroud)

r legend ggplot2

50
推荐指数
7
解决办法
5万
查看次数

在dplyr中覆盖"未显示的变量",以显示df中的所有列

当我在本地数据框中有一个列时,有时我得到的消息Variables not shown就像这个(荒谬的)示例只需要足够的列.

library(dplyr)
library(ggplot2) # for movies

movies %.% 
 group_by(year) %.% 
 summarise(Length = mean(length), Title = max(title), 
  Dramaz = sum(Drama), Actionz = sum(Action), 
  Action = sum(Action), Comedyz = sum(Comedy)) %.% 
 mutate(Year1 = year + 1)

   year    Length                       Title Dramaz Actionz Action Comedyz
1  1898  1.000000 Pack Train at Chilkoot Pass      1       0      0       2
2  1894  1.000000           Sioux Ghost Dance      0       0      0       0
3  1902  3.555556     Voyage dans la lune, Le      1       0      0       2
4 …
Run Code Online (Sandbox Code Playgroud)

r options output-formatting displayformat dplyr

34
推荐指数
3
解决办法
2万
查看次数

ggplot轴限制的不对称扩展

如何在ggplot中不对称地调整限制的扩展?例如,

library(ggplot2)

ggplot(mtcars) + 
  geom_bar(aes(x = cyl), width = 1)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我希望条形图的底部与面板背景的底部齐平,但仍然需要顶部的空间.我可以使用空白注释来实现此目的:

ggplot(mtcars) + 
  geom_bar(aes(x = cyl), width = 1) +
  annotate("blank", x = 4, y = 16) +
  scale_y_continuous(expand = c(0.0,0)) 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

ggplot但是,在以前的版本中,我可以使用Rosen Matev提供的解决方案:

library("scales")
scale_dimension.custom_expand <- function(scale, expand = ggplot2:::scale_expand(scale)) {
  expand_range(ggplot2:::scale_limits(scale), expand[[1]], expand[[2]])
}

scale_y_continuous <- function(...) {
  s <- ggplot2::scale_y_continuous(...)
  class(s) <- c('custom_expand', class(s))
  s
}
Run Code Online (Sandbox Code Playgroud)

然后使用scale_y_continuous(expand = list(c(0,0.1), c(0,0)))会在图表顶部添加一致的附加内容.但是,在当前版本中,我收到错误

ggplot(mtcars) + 
  geom_bar(aes(x = cyl), width = 1) +
  scale_y_continuous(expand = list(c(0,0.1), c(0,0))) …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

29
推荐指数
2
解决办法
5103
查看次数

继承ggplot2 :: fortify

在最新版本中ggplot2,?fortify返回:

描述

我现在推荐使用扫帚 包,而不是使用这个功能,它实现了更广泛的方法.fortify可能会在将来弃用.

broom软件包确实提供了许多替代方案(例如augment).在什么情况下应该使用哪一个?

我在替代特别感兴趣的fortify(spdf)地方spdf是一个SpatialPolygonsDataFrame.

r ggplot2 broom

27
推荐指数
2
解决办法
9278
查看次数

多个不同大小的ggplots

grid.arrangegridExtra包中使用相对简单的方法在矩阵中排列多个图,但是ggplot2当一些图比其他图更大时,如何安排图(我正在处理的图)?在基础上,我可以使用layout()如下例子:

 nf <- layout(matrix(c(1,1,1,2,3,1,1,1,4,5,6,7,8,9,9), byrow=TRUE, nrow=3))
 layout.show(nf)
Run Code Online (Sandbox Code Playgroud)

ggplot情节的等价物是什么?

在此输入图像描述

包含的一些情节

library(ggplot2)
p1 <- qplot(x=wt,y=mpg,geom="point",main="Scatterplot of wt vs. mpg", data=mtcars)
p2 <- qplot(x=wt,y=disp,geom="point",main="Scatterplot of wt vs disp", data=mtcars)
p3 <- qplot(wt,data=mtcars)
p4 <- qplot(wt,mpg,data=mtcars,geom="boxplot")
p5 <- qplot(wt,data=mtcars)
p6 <- qplot(mpg,data=mtcars)
p7 <- qplot(disp,data=mtcars)
p8 <- qplot(disp, y=..density.., geom="density", data=mtcars)
p9 <- qplot(mpg, y=..density.., geom="density", data=mtcars)
Run Code Online (Sandbox Code Playgroud)

layout r ggplot2 gridextra gtable

22
推荐指数
5
解决办法
9525
查看次数

是否可以在全球范围内将na.rm设置为TRUE?

对于喜欢命令max选项na.rm是默认设置FALSE.我理解为什么这一般是一个好主意,但我想将它逆转一段时间 - 即在会议期间.

na.rm = TRUE每当它是一个选项时,我怎么能要求R设置?我发现

options(na.action = na.omit)
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我知道我可以na.rm=TRUE为我写的每一个函数设置一个选项.

my.max <- function(x) {max(x, na.rm=TRUE)}
Run Code Online (Sandbox Code Playgroud)

但这不是我想要的.我想知道是否有一些我可以在全球/普遍做的事情,而不是为每个功能做这件事.

r na na.rm

20
推荐指数
3
解决办法
5467
查看次数

r - file.choose()自定义对话窗口

file.choose()运行后弹出的对话窗口有没有办法显示自定义标题,类似于X <- menu(files, graphics=TRUE, title="Choose file X")

现在我的代码需要加载几个文件.

X <- read.csv(file.choose())
Y <- read.csv(file.choose())
Z <- read.csv(file.choose())
Run Code Online (Sandbox Code Playgroud)

目前我只是使用我的(人类)内存来知道为第一个窗口,第二个窗口和第三个窗口选择哪些文件,但我希望窗口显示哪个对象X YZ当前窗口的文件将被导入.我可以将窗口移到一边看看控制台的代码行,但这看起来非常不优雅.

我试过这个X <- read.csv(file.choose(new=c("Choose X")))例子,但似乎没有做任何事情.

import r

13
推荐指数
2
解决办法
3万
查看次数

dplyr不按日期对数据进行分组

我试图计算人们使用Leada提供的数据集所采取的自行车频率.

这是代码:

library(dplyr)

setAs("character", "POSIXlt", function(from) strptime(from, format = "%m/%d/%y %H:%M"))
d <- read.csv("http://mandrillapp.com/track/click/30315607/s3-us-west-1.amazonaws.com?p=eyJzIjoiemxlVjNUREczQ2l5UFVPeEFCalNUdmlDYTgwIiwidiI6MSwicCI6IntcInVcIjozMDMxNTYwNyxcInZcIjoxLFwidXJsXCI6XCJodHRwczpcXFwvXFxcL3MzLXVzLXdlc3QtMS5hbWF6b25hd3MuY29tXFxcL2RhdGF5ZWFyXFxcL2Jpa2VfdHJpcF9kYXRhLmNzdlwiLFwiaWRcIjpcImEyODNiNjMzOWJkOTQxMGM5ZjlkYzE0MmQ0NDQ5YmU4XCIsXCJ1cmxfaWRzXCI6W1wiMTVlYzMzNWM1NDRlMTM1ZDI0YjAwODE4ZjI5YTdkMmFkZjU2NWQ2MVwiXX0ifQ",
              colClasses = c("numeric", "numeric", "POSIXlt", "factor", "numeric", "POSIXlt", "factor", "numeric", "numeric", "factor", "character"),
              stringsAsFactors = T)
names(d)[9] <- "BikeNo"

d <- tbl_df(d)

d <- d %>% mutate(Weekday = factor(weekdays(Start.Date)))
d %>% group_by(Weekday) 
  %>% summarise(Total = n()) 
  %>% select(Weekday, Total)
Run Code Online (Sandbox Code Playgroud)

这很奇怪,但是dplyr不希望按工作日分组数据说:

错误:列'Start.Date'具有不受支持的类型

为什么它关心Start.Date列,我按哪个因素分组?您可以在本地运行代码以重现错误:它将自动下载数据.

PS我使用的是dplyr版本:dplyr_0.3.0.2

r strptime dplyr

12
推荐指数
1
解决办法
9103
查看次数

r中的条件连接

我想有条件地将两个数据表连接在一起:

library(data.table)
set.seed(1)

key.table <- 
  data.table(
    out = (0:10)/10,
    keyz = sort(runif(11))
  )

large.tbl <- 
  data.table(
    ab = rnorm(1e6),
    cd = runif(1e6)
  )
Run Code Online (Sandbox Code Playgroud)

根据以下规则:匹配的最小值outkey.tablekeyz值大于cd.我有以下内容:

library(dplyr)
large.tbl %>%
  rowwise %>%
  mutate(out = min(key.table$out[key.table$keyz > cd]))
Run Code Online (Sandbox Code Playgroud)

它提供了正确的输出.我遇到的问题是,我实际使用的rowwise操作似乎很昂贵,large.tbl除非它在特定的计算机上,否则会崩溃.是否有更少的内存昂贵的操作?以下似乎稍微快一点,但对我遇到的问题还不够.

large.tbl %>%
    group_by(cd) %>%
    mutate(out = min(key.table$out[key.table$keyz > cd]))
Run Code Online (Sandbox Code Playgroud)

这有点像data.table答案的问题,但答案不必使用该包.

join r dplyr

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