小编Abi*_*iel的帖子

Excel的日期轴标注算法

我经常在 Excel 中绘制时间序列数据,我发现折线图上的默认 Excel 日期轴标签非常难看。特别是,

1) 日期通常水平或垂直旋转,这会压缩绘图区域的空间并使日期标签更难阅读。这是因为有两个主要的刻度线。

2) 标签显示太精确:时间序列数据库通常会将每月时间序列之类的内容转储到电子表格中,日期值为 1/1/2001、2/1/2001 等。Excel 将尝试显示完整的 mm/默认情况下为 dd/yyyy 日期字符串,这对于较短的每日时间系列可能更可取,但对于非每日系列或长时间运行的系列则不受欢迎。在这些情况下,像 mm/yyyy 或 yyyy 这样的格式可能更可取。

我的问题是,是否有人已经编写了可以制作漂亮日期标签轴的好算法?水平标签仅带有足够远的刻度以适应这一点,并且随着数据开始覆盖越来越长的时间跨度(即从 1/1/2001 到 1/2001 到 2001 转换的标签),日期的智能格式设置。我最终将不得不使用 VBA 来编写它,但我可以翻译用另一种语言编写的算法。

谢谢。

excel vba

5
推荐指数
1
解决办法
1580
查看次数

从S3索引函数返回"["不可见

在自定义类上使用S3索引函数"["时,是否可以返回不可见对象?例如,在下面的代码中,有没有办法让最后一行代码不打印任何东西?

mat <- function(x) {
  structure(x, class="mat")
}

"[.mat" <- function(x, i, j) {
  invisible(unclass(x)[i,j])
}

m1 <- mat(matrix(1:10, ncol=2))
m1[1:2,]

     [,1] [,2]
[1,]    1    6
[2,]    2    7
Run Code Online (Sandbox Code Playgroud)

r

5
推荐指数
2
解决办法
93
查看次数

使用 `:=` 语法以编程方式生成要分配给 data.table 的列列表

在 中data.table,我可以使用语法生成立即分配给表的新列列表`:=`,如下所示:

x <- data.table(x1=1:5, x2=1:5)
x[, `:=` (x3=x1+2, x4=x2*3)]
Run Code Online (Sandbox Code Playgroud)

或者,我可以执行以下操作:

x[, c("x3","x4") := list(x1+2, x2*3)]
Run Code Online (Sandbox Code Playgroud)

我想做类似第一种方法的事情,但使用自定义函数自动构建赋值语句的右侧。例如,假设我想要一个函数接受一组列名,然后生成作为给定列的平均值的新列,列名等于原始列加上一些后缀。例如,

x[, `:=` MEAN(x1,x2)]
Run Code Online (Sandbox Code Playgroud)

会产生相同的结果

x[, `:=` (x1_mean=mean(x1), x2_mean=mean(x2))]
Run Code Online (Sandbox Code Playgroud)

这可能吗data.table?我意识到如果我愿意像示例中那样传递列名称列表c("x3","x4") := ...,这是可能的,但我想避免这种情况,这样我就不必编写那么多代码。

r data.table

5
推荐指数
1
解决办法
177
查看次数

使用R Reticulate软件包重新加载Python模块

我想知道是否有一种方法可以重新加载通过reticulate软件包导入R的模块,类似于autoreloadIPython 的扩展。例如,假设我在本地开发自己的模块,则可以通过

library(reticulate)
import_from_path("mypackage", "/path/to/package")
Run Code Online (Sandbox Code Playgroud)

但是,如果我更改代码mypackage的唯一方法是认为可以反映它们,那就是重新启动R。这与无法重新加载模块的正常Python行为一致。一种解决方法是从我正在其中进行更改的包中获取文件,即

source_python("/path/to/package/file.py")
Run Code Online (Sandbox Code Playgroud)

但是,如果file.py正在导入本地包中正在更改的其他文件,则不会反映对这些文件的更改。

r reticulate

5
推荐指数
1
解决办法
222
查看次数

具有二进制因变量的面板数据在R中

是否可以使用具有二进制因变量的面板数据集在R中进行回归?我熟悉使用glm用于logit和probit以及plm用于面板数据,但我不确定如何将两者结合起来.是否有任何现有的代码示例?

谢谢.

编辑

如果我能弄清楚如何提取plm()在进行回归时使用的矩阵,也会有所帮助.例如,您可以使用plm来执行固定效果,或者您可以使用适当的虚拟变量创建矩阵,然后通过glm()运行它.然而,在这样的情况下,自己生成假人很烦人,让plm为你做更容易.

亚别

regression r panel-data plm

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

在Highcharts中反转Y轴

是否可以选择在Highcharts图表中反转Y轴?例如,如果轴通常从轴底部的0到顶部的100,则应显示从底部的100到顶部的0运行.例如,当使用具有两个Y轴的图表并且您希望以反向关系查看两条线之间的相关性时,这很有用.

请注意,我在这里不是在谈论Highcharts中的倒置选项,它只是翻转X轴和Y轴的位置.

highcharts

4
推荐指数
1
解决办法
5396
查看次数

使用VBA将图表系列放在辅X轴上

我有一个折线图,我试图通过VBA添加给定Y值的水平线.我正在遵循本指南,建议在现有图表中添加一行,然后将其类型更改为分散,这会导致Excel自动将系列放在辅X轴上.然后可以进一步格式化它.

我的问题是,当使用VBA执行此操作时,我不明白如何将线切换到辅助X轴.默认情况下,所有新行都将在主X轴上.

例如,假设chrt是Chart对象:

' Enable secondary X axis (I think)
chrt.HasAxis(XlAxisType.xlCategory, XlAxisGroup.xlSecondary) = True

Dim se As Series
Set se = chrt.SeriesCollection.NewSeries
se.ChartType = xlXYScatterLinesNoMarkers

' Add a line at Y = 0
se.xValues = Array(0, 1)
se.values = Array(0, 0)
Run Code Online (Sandbox Code Playgroud)

现在,如何se进入辅X轴?

excel vba excel-vba

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

在单页上放置多个ggplot图时,日期标签会重叠

我试图使用gridExtra包的arrange()函数在页面上放置多个ggplot2时间序列图.不幸的是,我发现x轴标签被推到了一起; 虽然我的图表只占用了1/4的页面,但该图表似乎将相同数量的x轴标签作为整页图表.有一个更好的方法吗?我宁愿不必手动设置任何点,因为我将处理大量跨越不同日期范围并具有不同频率的图表.

以下是一些复制问题的示例代码.

dfm <- data.frame(index=seq(from=as.Date("2000-01-01"), length.out=100, by="year"), 
    x1=rnorm(100), 
    x2=rnorm(100))
mydata <- melt(dfm, id="index")

pdf("test.pdf")
plot1 <- ggplot(mydata, aes(index, value, color=variable))+geom_line()
plot2 <- ggplot(mydata, aes(index, value, color=variable))+geom_line()
plot3 <- ggplot(mydata, aes(index, value, color=variable))+geom_line()
plot4 <- ggplot(mydata, aes(index, value, color=variable))+geom_line()
arrange(plot1, plot2, plot3, plot4, ncol=2, nrow=2)
dev.off()
Run Code Online (Sandbox Code Playgroud)

r ggplot2

3
推荐指数
1
解决办法
3781
查看次数

查找多个常见的起始字符串

我有一个字符串列表,其中一个或多个字符串子集有一个共同的起始字符串.我想要一个函数,它将原始字符串列表作为输入,并返回所有常见起始字符串的列表.在我的特定情况下,我也知道每个公共前缀必须以给定的分隔符结束.下面是我正在谈论的输入数据类型的示例(忽略任何颜色突出显示):

Population of metro area / Portland
Population of city / Portland
Population of metro area / San Francisco
Population of city / San Francisco
Population of metro area / Seattle
Population of city / Seattle
Run Code Online (Sandbox Code Playgroud)

这里的分隔符是/和常见的起始字符串是Population of metro areaPopulation of city.也许这个分隔符最终不会重要,但我已经把它强调我不希望只有一个结果回来,即普遍的共同起始字符串Population of; 我也不想要共同的子串Population of metro area / SPopulation of city / S.

此算法的最终用途是按字母顺序对字符串进行分组.例如,上面的列表可以重新构建为一个消除冗余信息的层次结构,如下所示:

Population of metro area
    Portland
    San Francisco
    Seattle
Population of city
    Portland
    San Francisco …
Run Code Online (Sandbox Code Playgroud)

python algorithm

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

在使用pandas进行上采样时填充更高频率的窗口

我正在使用pandas将低频数据转换为更高的频率(例如每月到每天).进行此转换时,我希望得到的更高频率索引跨越整个低频窗口.例如,假设我有一个月度系列,如下所示:

import numpy as np
from pandas import *
data = np.random.randn(2)
s = Series(data, index=date_range('2012-01-01', periods=len(data), freq='M'))

s
2012-01-31    0
2012-02-29    1
Run Code Online (Sandbox Code Playgroud)

现在,我将其转换为每日频率:

s.resample('D')
2012-01-31     0
2012-02-01   NaN
2012-02-02   NaN
2012-02-03   NaN
...
2012-02-27   NaN
2012-02-28   NaN
2012-02-29     1
Run Code Online (Sandbox Code Playgroud)

请注意结果输出如何从2012-01-31到2012-02-29.但我真正想要的是从2011-01-01到2012-02-29的日子,所以每日指数"填补"整个1月,即使2012-01-31仍然是唯一的非NaN观察月.

我也很好奇是否有内置方法可以更好地控制较高频率周期如何用较低频率值填充.在每月每日示例中,默认是仅填写每个月的最后一天; 如果我使用a PeriodIndex来索引我的系列,我也s.resample('D', convention='start')可以只填充第一个观察.但是,我也希望选项以月值填充每月的每一天,并用每日平均值填充每天(每月价值除以当月的天数).

请注意,基本的回填和向前填充不足以用月值填充当月的每日观察值.例如,如果月度序列从1月到3月运行但2月值是NaN,则向前填充会将1月值带入2月,这是不希望的.

python pandas

3
推荐指数
1
解决办法
1668
查看次数

带有过滤条件的data.table group by

给定一个data.table类似下面的内容,我想创建一个新列,该列是value按地区和where求和的period == 0

   region period value
1:     US      0    10
2:     US      1    11
3:  Japan      0    12
4:  Japan      1    13
Run Code Online (Sandbox Code Playgroud)

典型的data.frame方法是创建一个单独的帧,按周期过滤,按区域求和,然后将其与原始帧合并region为键。我想知道在data.table使用data.tablegroupby语法时是否有单行方法。我最接近的是下面的两行方法。

x1 <- data.table(
  region=c("US","US","Japan","Japan"),
  period=c(0,1,0,1),
  value=10:13)

x1[period==0,value0:=sum(value),by=region]
x1[,value0:=min(value0,na.rm=T),by=region]


   region period value value0
1:     US      0    10     10
2:     US      1    11     10
3:  Japan      0    12     12
4:  Japan      1    13     12
Run Code Online (Sandbox Code Playgroud)

r data.table

3
推荐指数
1
解决办法
7575
查看次数

使用列号向量从R data.frame/matrix中提取"锯齿状"列

我在R中有一个data.frame x,其中dim(x)=(m,n),数字长度为m,矢量y在1和n之间.换句话说,y在x中的每一行都有一个条目,每个值都是x中的有效列号.我想使用y中的列号从x中提取"锯齿状"数字列.例如,如果

y <- c(2,4,1,6,5) 
Run Code Online (Sandbox Code Playgroud)

那么我想得到一个等于的数字向量

c(x[1,2],x[2,4],x[3,1],x[4,6],x[5,5])
Run Code Online (Sandbox Code Playgroud)

最有效的方法是什么?

谢谢.

r

2
推荐指数
1
解决办法
692
查看次数

合并预先排序的文件而不将所有内容读入内存

我有一个日志文件列表,其中每个文件中的每一行都有一个时间戳,并且行在每个文件中按升序排列.不同的文件可以有重叠的时间范围,我的目标是将它们组合成一个大文件,按时间戳排序.在排序中可能存在联系,在这种情况下,我希望下一行来自我输入列表中首先列出的任何文件.

我已经看到了如何使用fileinput(参见此处)的示例,但这似乎将所有文件读入内存.由于我的文件很大,这将是一个问题.因为我的文件是预先排序的,所以似乎应该有一种方法来合并它们,使用的方法只需要考虑每个文件中最新的未探索行.

python

2
推荐指数
1
解决办法
3431
查看次数