小编ban*_*nbh的帖子

动态地将列添加到xts对象

如果您提前知道列的名称,则可以直接向xts对象添加列.例如,要添加名为"b"的列:

n <- 5
x <- merge(xts(order.by = as.Date('2015-1-1') + 1:n), a = rnorm(n))
x$b <- rnorm(n)
Run Code Online (Sandbox Code Playgroud)

添加动态命名的列(即,名称仅在运行时已知的列)更难:

new.col.name <- 'c' # known only at runtime
x[, new.col.name] <- rnorm(n) # this generates an error
Run Code Online (Sandbox Code Playgroud)

一种方法是添加具有临时名称的列,然后重命名它:

stopifnot(!('tmp' %in% names(x)))
x$tmp <- rnorm(n)
names(x)[names(x) == 'tmp'] <- new.col.name
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?(另外,分配names一个xts对象会导致正在制作的对象的副本吗?例如,如果n非常大,上述方法是否可以正常工作?)

r xts

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

如何用 tidyr 替换数组的 reshape2::melt ?

我想将矩阵/数组(带有暗名称)转换为数据框。使用 可以很容易地完成此操作reshape2::melt,但使用 似乎更困难tidyr,并且实际上在数组的情况下实际上不可能。我错过了什么吗?(特别是因为reshape2自称已退休;请参阅https://github.com/hadley/reshape)。

例如,给定以下矩阵

MyScores <- matrix(runif(2*3), nrow = 2, ncol = 3, 
                   dimnames = list(Month = month.name[1:2], Class = LETTERS[1:3]))
Run Code Online (Sandbox Code Playgroud)

我们可以将其转换为数据框,如下所示

reshape2::melt(MyScores, value.name = 'Score') # perfect
Run Code Online (Sandbox Code Playgroud)

或者,使用tidyr如下:

as_tibble(MyScores, rownames = 'Month') %>% 
  gather(Class, Score, -Month)
Run Code Online (Sandbox Code Playgroud)

在这种情况下reshape2tidyr看起来很相似(尽管reshape2如果您正在寻找长格式数据框,则更短)。

然而对于数组来说,这似乎更困难。给定

EverybodyScores <- array(runif(2*3*5), dim = c(2,3,5), 
                         dimnames = list(Month = month.name[1:2], Class = LETTERS[1:3], StudentID = 1:5))
Run Code Online (Sandbox Code Playgroud)

我们可以将其转换为数据框,如下所示:

reshape2::melt(EverybodyScores, value.name = 'Score') # perfect
Run Code Online (Sandbox Code Playgroud)

但使用 …

arrays r reshape2 tidyr

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

MSBuild错误地设置了TargetFrameworkDirectories

当我尝试构建一个C#控制台应用程序(可能还有其他)时,它似乎TargetFrameworkDirectories设置不正确; 特别是它省略了Facades目录.

由于我一直试图诊断问题一段时间,这里列出了可能相关的事实.

  • 当尝试在Visual Studio 2012中构建引用Reactive Extension库(使用NuGet管理)的项目时,问题就出现了.错误(或警告)是warning MSB3267: The primary reference "System.Runtime", which is a framework assembly, could not be resolved in the currently targeted framework. ".NETFramework,Version=v4.5".在msbuild执行期间发生此问题ResolveAssemblyReference
  • 我可以使用msbuild从命令行重现错误,这似乎更简单
  • 其他工作站没有出现问题.在一台好的机器上运行带有详细程度的msbuild,在坏的机器上运行了日志文件中的一些差异
  • 在一台好的机器TargetFrameworkDirectories(参数ResolveAssemblyReference)C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades\但是在坏机器上它缺少第二个条目(Facades目录)
  • 扫描好的和坏的msbuild日志文件会出现以下差异:

    1. AssignProjectConfiguration在错误的构建中跳过目标,但在良好的构建中运行
    2. GetInstalledSDKLocations好的构建中跳过了许多目标,但在构建不好的情况下没有提到
    3. ResolveAssemblyReference任务传递AssembliesImplicit=true的好身材,但不是在恶劣的构建.
    4. ResolveAssemblyReference任务传递任务参数TargetFrameworkDirectoriesC:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\在恶劣的身材,但好建外立面目录(见上文)的第二项.

因为这是由C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets我在好坏机器上分析该文件所驱动的.它们包含许多差异.第一个区别是项目元素(第17行),它TreatAsLocalProperty="OutDir"在良好的机器上有一个额外的属性.在良好的机器上,目标文件包含更多注释,例如<!-- VS10 without SP1 and without …

msbuild .net-4.5

6
推荐指数
1
解决办法
1508
查看次数

如何在使用对数刻度时添加垂直线?

如何ggplot在垂直轴上使用对数刻度的绘图添加垂直线?

例如,

ggplot(data.frame(x=1:2, y=c(10,20)), aes(x,y)) + 
  geom_line() + 
  geom_vline(xintercept = 1.5)
Run Code Online (Sandbox Code Playgroud)

按预期工作.如果将垂直轴转换为对数刻度:

ggplot(data.frame(x=1:2, y=c(10,20)), aes(x,y)) +
  geom_line() + 
  geom_vline(xintercept = 1.5) + 
  coord_trans(y = 'log')
Run Code Online (Sandbox Code Playgroud)

然后垂直线消失.也许相关的是,如果稍微更改数据:

ggplot(data.frame(x=1:2, y=c(1,20)), aes(x,y)) + # y[1] is now different
  geom_line() + 
  geom_vline(xintercept = 1.5) + 
  coord_trans(y = 'log')
Run Code Online (Sandbox Code Playgroud)

然后垂直线仍然缺失,但会发出警告消息:

Warning messages:
1: In self$trans$y$transform(y) : NaNs produced
2: In trans$transform(value) : NaNs produced
Run Code Online (Sandbox Code Playgroud)

因此,可能是因为尝试记录0(-Inf和无警告)或负数(NaN和警告)而导致缺失行.

(sessionInfo()R version 3.3.1 (2016-06-21)ggplot2_2.2.0.)

r ggplot2

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

在dplyr中使用summarize_at进行额外统计

有没有办法为summarize_at通话添加额外的统计数据?例如

iris %>% group_by(Species) %>% summarise_at(vars(), funs(mean, sd))
Run Code Online (Sandbox Code Playgroud)

将计算4列的平均值和标准偏差(总共8列).假设我也想知道每组中有多少行.就是这样的

# Below is not valid syntax 
iris %>% 
  group_by(Species) %>% 
  summarise_at(vars(), funs(mean, sd)) + summarise(n())
Run Code Online (Sandbox Code Playgroud)

鉴于以上不起作用,kludge是

iris %>% group_by(Species) %>% summarise_at(vars(), funs(mean, sd, length))
Run Code Online (Sandbox Code Playgroud)

实际上,它产生4个计数列的副本.

也许这超出了summarize_at朋友可以方便处理的范围?

r dplyr

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

未知变量 +

在 Little Typer 第 2 章中,第 100 帧给出了以下定义:

(claim pearwise+
  (? Pear Pear
     Pear))

(define pearwise+
  (? (anjou bosc)
    (elim-Pear anjou
      (? (a1 d1)
        (elim-Pear bosc
          (? (a2 d2)
            (cons
              (+ a1 a2)
              (+ d1 d2))))))))
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我收到以下错误:

Unknown variable +
Run Code Online (Sandbox Code Playgroud)

怎么了?

racket pie-lang

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

将列合并到列表列中

有没有tidyverse比使用更惯用的方法将多个列组合成一个列表列mapply

例如给出以下内容

tibble(.rows = 9) %>% 
  mutate(foo = runif(n()),
         a_1 = runif(n()),
         a_2 = runif(n()),
         a_3 = runif(n())) ->
  Z
Run Code Online (Sandbox Code Playgroud)

(其中Z可能包含其他列,并且也可能包含超过 3 as)可以做

Z %>% mutate(A = mapply(c, a_1, a_2, a_3, SIMPLIFY = FALSE))
Run Code Online (Sandbox Code Playgroud)

效果很好,尽管能够说starts_with('a_')而不是a_1, a_2, a_3.

另一种可能性是

Z %>% 
  rowid_to_column() %>% 
  pivot_longer(cols = starts_with('a_')) %>% 
  group_by(rowid) %>% 
  summarise(foo = unique(foo),
            A = list(value)) %>% 
  select(-rowid)
Run Code Online (Sandbox Code Playgroud)

这在技术上是可行的,但引入了其他问题(例如,它使用了一个丑陋的foo = unique(foo);此外,如果不是只有一个而是foo有很多foos ,它会变得更加复杂)。

r dplyr

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

如何找到集合中的下一个最大密钥?

假设我有一个用C#编写的字典。假设键具有可比性,我如何找到大于给定k(与字典键的类型相同)的最小键?但是,我想通过SortedDictionary这样的集合有效地做到这一点。

显然,如果不是高效地执行操作的问题,则可以从任何字典开始,提取其键,然后使用带有合适谓词的First方法。但这将在线性时间(按键的数量)中执行,如果一个键具有一组排序的键,则一个人应该能够在记录时间内找到该键。

谢谢。

c# collections dictionary

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

小打字机

在《The Little Typer》一书中,我刚刚开始使用DrRacket。从 David Christiansen 的视频中,我输入了:

(claim two-plus-two-is-four
  (= Nat (+ 2 2) 4))
Run Code Online (Sandbox Code Playgroud)

返回错误:

 claim : this function is not defined.
Run Code Online (Sandbox Code Playgroud)

为什么?

types racket pie-lang

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

gganimate 和(有时)空方面的问题

我正在观察一些gganimate我无法解释的行为,我想了解我做错了什么(或者它是否是一个错误)。

例如,这是一个非常简单的数据集及其绘图:

library(dplyr) # dplyr_0.7.8
library(tidyr) # tidyr_0.8.2 

crossing(p = 1:2, 
         t = seq(0, 1, len = 30),
         s = c(0, .5)) %>%
  mutate(x = t,
         y = t^p) %>%
  filter(t > s) ->
  Z

library(ggplot2) # ggplot2_3.1.0

Z %>%
  ggplot(aes(x,y)) +
  facet_wrap(~s) +
  geom_point()
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,第二个方面 (s=0.5) 仅具有 x > 0.5 的数据,其中(根据 tibble Z 的构造方式)来自 t > 0.5。

如果要为上述数据设置动画(t用作时间),我希望动画的前半部分的第二个方面为空,然后在后半部分显示与第一个方面相同的方面。然而:

library(gganimate) # gganimate_1.0.2
Z %>%
  ggplot(aes(x, y, group = interaction(p,s))) +
  facet_wrap(~s) +
  geom_point() +
  transition_time(t) + …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 gganimate

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

标签 统计

r ×6

dplyr ×2

ggplot2 ×2

pie-lang ×2

racket ×2

.net-4.5 ×1

arrays ×1

c# ×1

collections ×1

dictionary ×1

gganimate ×1

msbuild ×1

reshape2 ×1

tidyr ×1

types ×1

xts ×1