我正在尝试编写一个函数,该函数将包含时间序列数据的数据框的名称和该数据框中列的名称作为参数.该函数对该数据执行各种操作,其中一个操作是在列中添加每年的运行总计.我正在使用普利尔.
当我直接使用ddply和cumsum的列名时我没有问题:
require(plyr)
df <- data.frame(date = seq(as.Date("2007/1/1"),
by = "month",
length.out = 60),
sales = runif(60, min = 700, max = 1200))
df$year <- as.numeric(format(as.Date(df$date), format="%Y"))
df <- ddply(df, .(year), transform,
cum_sales = (cumsum(as.numeric(sales))))
Run Code Online (Sandbox Code Playgroud)
这一切都很好,但最终目标是能够将列名称传递给此函数.当我尝试使用变量代替列名时,它不能像我预期的那样工作:
mycol <- "sales"
df[mycol]
df <- ddply(df, .(year), transform,
cum_value2 = cumsum(as.numeric(df[mycol])))
Run Code Online (Sandbox Code Playgroud)
我以为我知道如何按名称访问列.这让我很担心,因为它表明我无法理解索引和提取的基本内容.我原本以为以这种方式按名称引用列将是一个常见的需求.
我有两个问题.
TIA
我正在使用ggplot2绘制线图,显示多个仪器的价格随时间的变化.我成功地在图上获得了多行,并添加了显示最近价格变化的值.我想要做的(并且还没有实现)是重新排序图例键,以便最高涨的价格系列位于图例的顶部,然后是价格系列的关键,该价格序列的价格上涨第二,等等.
在下图中,图例按字母顺序显示键.我想要做的是以DDD,AAA,CCC然后BBB的顺序显示图例关键条目,这是最近日期的性能顺序.我怎样才能做到这一点?

最小代码如下.
require(ggplot2)
require(scales)
require(gridExtra)
require(lubridate)
require(reshape)
# create fake price data
set.seed(123)
monthsback <- 15
date <- as.Date(paste(year(now()), month(now()),"1", sep="-")) - months(monthsback)
mydf <- data.frame(mydate = seq(as.Date(date), by = "month", length.out = monthsback),
aaa = runif(monthsback, min = 600, max = 800),
bbb = runif(monthsback, min = 100, max = 200),
ccc = runif(monthsback, min = 1400, max = 2000),
ddd = runif(monthsback, min = 50, max = 120))
# function to calculate change
change_from_start <- function(x) { …Run Code Online (Sandbox Code Playgroud) 我想根据特定列中给出的值为ggplot2 facet图的背景着色.使用我已经问过的先前问题的答案,我能够将我需要的东西拼凑在一起.@joran对这个问题的回答特别有用,因为它说明了创建一个单独的数据框以传递给ggplot的技术.
这一切都很好,给出了如下图所示的输出:

这是我用来生成上图的代码:
# User-defined variables go here
list_of_names <- c('aa','bb','cc','dd','ee','ff')
list_of_regions <- c('europe','north america','europe','asia','asia','japan')
# Libraries
require(ggplot2)
require(reshape)
# Create random data with meaningless column names
set.seed(123)
myrows <- 30
mydf <- data.frame(date = seq(as.Date('2012-01-01'), by = "day", length.out = myrows),
aa = runif(myrows, min=1, max=2),
bb = runif(myrows, min=1, max=2),
cc = runif(myrows, min=1, max=2),
dd = runif(myrows, min=1, max=2),
ee = runif(myrows, min=1, max=2),
ff = runif(myrows, min=1, max=2))
# Transform data frame from …Run Code Online (Sandbox Code Playgroud) 我正在制作一个非常宽的图表,当输出为PNG文件时,在x轴上占用几千个像素; 有大约20年的每日数据.(这可能会或可能不会被视为良好做法,但它仅供我自己使用,不适用于发布.)因为图表太宽,所以当您滚动图表时,y轴会从视图中消失.因此,我想以2年的间隔向图中添加标签,以显示y轴上的值.生成的图表看起来像下面的一个,除了在保持其紧凑我用只有30天假数据的利益,并把标签大约每隔10天:

这可以根据需要或多或少地工作,但我想知道是否有更好的方法来接近它,如在此图表中(参见下面的代码)我有一个列,分别为120,140和160的3个y轴值.真实数据有更多级别,所以我最终会调用15次geom_text来将所有内容放在绘图区域.
问:是否有更简单的方法将所有20多个日期(每个日期有15个标签)一次性打印到图表上?
require(ggplot2)
set.seed(12345)
mydf <- data.frame(mydate = seq(as.Date('2012-01-01'), as.Date('2012-01-31'), by = 'day'),
price = runif(31, min = 100, max = 200))
mytext <- data.frame(mydate = as.Date(c('2012-01-10', '2012-01-20')),
col1 = c(120, 120), col2 = c(140,140), col3 = c(160,160))
p <- ggplot(data = mydf) +
geom_line(aes(x = mydf$mydate, y = mydf$price), colour = 'red', size = 0.8) +
geom_text(data = mytext, aes(x = mydate, y = col1, label = col1), size = 4) +
geom_text(data = mytext, aes(x = …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的data.frame:
library(ggplot2)
library(reshape2)
tasks <- c("Review literature", "Mung data")
dfr <- data.frame(
name = factor(tasks, levels = tasks),
start.date = c("24/08/2010 01:00:01", "24/08/2010 01:00:10", "01/11/2010 01:30:00", "01/11/2010 02:00:00"),
end.date = c("24/08/2010 02:00:00", "24/08/2010 03:00:00", "01/11/2010 02:00:00", "01/11/2010 04:00:00")
)
mdfr <- melt(dfr, measure.vars = c("start.date", "end.date"))
Run Code Online (Sandbox Code Playgroud)
我想使用ggplot2绘制这些数据,以便不同的日期在不同的方面,只有时间部分显示在x轴上?我尝试过类似的东西:
ggplot(mdfr, aes(as.Date(value, "%H/%M/%S"), name)) +
geom_line(size = 6) +
xlab("") + ylab("") +
theme_bw() + facet_wrap(~as.Date(value, "%d/%m/%Y"))
Error in layout_base(data, vars, drop = drop) :
At least one layer must contain all variables …Run Code Online (Sandbox Code Playgroud) 我有一个经常更改的 pandas 数据框,如下所示:
date name time timezone
0 2016-08-01 aaa 0900 Asia/Tokyo
1 2016-08-04 bbb 1200 Europe/Berlin
2 2016-08-05 ccc 1400 Europe/London
Run Code Online (Sandbox Code Playgroud)
日期、时间和时区是指交货日期,通常是海外地点,名称是客户公司的名称。
计划是获取这些数据并创建一个datetime_local列,其中包含数据帧列中显示的时区timezone。然后,我想添加一个datetime_london包含该日期和时间的列,但以伦敦的时间和日期表示。
我已经完成了大部分工作,但是当我打电话时,tz_localize我最终得到了一个ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(),这表明我没有正确处理时区列。
关于如何进行有什么建议吗?
mydf = pd.DataFrame(data={'date':['2016-08-01','2016-08-04','2016-08-05'],
'time':['0900','1200','1400'],
'timezone':['Asia/Tokyo','Europe/Berlin','Europe/London'],
'name':['aaa','bbb','ccc']}
)
print(mydf)
mydf["datetime"] = mydf["date"].map(str) + " " + mydf["time"]
mydf.datetime = pd.to_datetime(mydf.datetime)
mydf.index = mydf.datetime
print(mydf)
mydf["datetime_local"] = mydf.datetime
mydf.datetime_local.tz_localize(mydf.timezone)
Run Code Online (Sandbox Code Playgroud) 我正在使用RSelenium导航到网站并与元素进行交互.
问题:使用RSelenium,如何在下拉菜单中阅读选项列表,以便我可以识别可用的最新月份并使用它将下拉列表设置为正确的值?
在某个站点上,为用户提供了一个下拉菜单,用于设置一年中的月份,从而定义用于依次显示或下载月度数据的日期范围的结束点.随着全年提供额外数月的数据,下拉列表中的选项会发生变化.
截至7月底,下降将有1个选项,1月至6月.请注意,特定月份的数据会在该月末后的4-6周内发布,因此您不会在7月底之前获得6月份的数据,依此类推.我可以使用数字1到12设置值而没有任何问题,前提是下拉列表实际上包含相应的选项.
例如,如果7月的数据尚未发布(即,如果7月尚未出现在选项的下拉列表中),并且如果我尝试将下拉列表设置为"7",我将收到错误,我想避免.数据没有定期出现,因此我不能简单地假设月X的数据将出现在日期Y.
我相信Selenium本身有一个辅助类可用,但我不确定我是否可以通过RSelenium访问它.
示例代码如下 - 可能有点松懈,因为我还远未熟悉该软件包.
library(RSelenium)
RSelenium::checkForServer()
RSelenium::startServer()
remDr <- remoteDriver(remoteServerAddr = "localhost",
port = 4444,
browserName = "firefox"
)
remDr <- remoteDriver()
Sys.sleep(5)
remDr$open()
remDr$getStatus()
remDr$navigate("http://jamaserv.jama.or.jp/newdb/eng/index.html")
## Switch to left frame
frameElems <- remDr$findElements(using = "tag name", "frame")
sapply(frameElems, function(x){x$getElementAttribute("src")})
remDr$switchToFrame(frameElems[[1]])
webElem <- remDr$findElement(using = 'xpath', "//select[@name='txtTargetToMm']")
## Use javascript to set values
script <- paste0("arguments[0].value = '", 2, "'; arguments[0].onchange();") # set to February
remDr$executeScript(script, list(webElem))
webElem$getElementAttribute('value') # check to …Run Code Online (Sandbox Code Playgroud) 我想在使用两个 geom_line 图和 scale_colour_manual 的 ggplot 图表中使用一个变量作为图例键标签。如果我明确使用字符串来定义图例键标签,则一切正常,就像第 6.4.4 节一样。在 hadley 的书中,第 109 页。

另一方面,如果我在变量中弹出标签并在 geom_line 和 scale_colour_manual 调用中使用该变量,则没有任何反应。

如您所见,情节 'p1' 工作得很好。绘图 'p2' 没有显示两条线图,尽管它确实显示了正确的键标签。下面给出了用于生成这两个图的代码。(此请求的背景是我想将图例键标签传递给包装函数。)
问:为什么下面 p2 中使用的方法不起作用?如何使用变量来定义键标签并将它们链接到键标签中的正确颜色?
require(ggplot2)
require(lubridate)
set.seed(12345)
# create dummy time series data
monthsback <- 60
startdate <- as.Date(paste(year(now()),month(now()),"1",sep="-")) - months(monthsback)
x <- data.frame(mydate=seq(as.Date(startdate), by="month", length.out=monthsback),
myval1=runif(monthsback, min=600, max=800),
myval2=runif(monthsback, min=400, max=600))
var1 <- "foo-var"
var2 <- "bar-var"
p1 <- ggplot(x, aes( mydate, myval1)) +
geom_line( aes( x = mydate, y = myval1, colour = "foo"), size = …Run Code Online (Sandbox Code Playgroud) 我希望R打开在我的程序中创建的文件.我的代码使用以下代码将日志文件保存到名为logFile的变量中.
logFile <- sprintf("../output/%s_%s_output%sof%s.log", str1, str2, str3, str4);
Run Code Online (Sandbox Code Playgroud)
我试图通过调用来访问shell函数
shell('%s',logFile);
Run Code Online (Sandbox Code Playgroud)
但是我说错了
In shell("%s", toFile) : '%s' execution failed with error code 127
Run Code Online (Sandbox Code Playgroud)
如何在完成写入文件后让我的程序打开该文件?
这是我的脚本和相关的情节:
library(ggplot2)
library(reshape)
df <- structure(list(ID = structure(1:19, .Label = c("2818/22/0834",
"2818/22/0851", "2818/22/0853", "2818/22/0886", "B0F", "B12T",
"B1T", "B21T", "B22F", "B26T", "B33F", "B4F", "P1", "P21", "P24",
"P25", "P27", "P28", "P29"), class = "factor"), K = c(0.089,
0.094, 0.096, 0.274, 0.09, 0.312, 0.33, 0.178, 0.05, 0.154, 0.083,
0.098, 0.035, 0.084, 0.053, 0.061, 0.043, 0.094, 0.101), Na = c(2.606,
3.822, 4.977, 2.522, 15.835, 83.108, 52.041, 41.448, 11.849,
40.531, 5.854, 10.151, 3.52, 8.445, 5.273, 7.246, 6.177, 14.813,
15.569), Cl = c(3.546, 6.181, 8.422, 3.733, …Run Code Online (Sandbox Code Playgroud)