小编crf*_*crf的帖子

使用dplyr按组连接字符串

我有一个看起来像这样的数据框

> data <- data.frame(foo=c(1, 1, 2, 3, 3, 3), bar=c('a', 'b', 'a', 'b', 'c', 'd'))
> data
  foo bar
1   1   a
2   1   b
3   2   a
4   3   b
5   3   c
6   3   d
Run Code Online (Sandbox Code Playgroud)

我想创建一个新列bars_by_foo,它是bar by foo的值的串联.所以新数据应如下所示:

  foo bar bars_by_foo
1   1   a          ab
2   1   b          ab
3   2   a           a
4   3   b         bcd
5   3   c         bcd
6   3   d         bcd
Run Code Online (Sandbox Code Playgroud)

我希望以下内容有效:

p <- function(v) {
  Reduce(f=paste, x = v)
}
data %>% …
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

使用grequests向sourceforge发出数千个请求,获取"使用url超出最大重试次数"

我对这一切都很陌生; 我需要获得数千个sourceforge项目的数据,以便我写一篇论文.数据全部以json格式免费提供,网址为http://sourceforge.net/api/project/name/[project name]/json.我有几千个URL的列表,我使用以下代码.

import grequests
rs = (grequests.get(u) for u in ulist)
answers = grequests.map(rs)
Run Code Online (Sandbox Code Playgroud)

使用此代码,我能够获得我喜欢的任何200个左右项目的数据,即rs = (grequests.get(u) for u in ulist[0:199])工作,但是一旦我查看,所有尝试都会得到满足

ConnectionError: HTTPConnectionPool(host='sourceforge.net', port=80): Max retries exceeded with url: /api/project/name/p2p-fs/json (Caused by <class 'socket.gaierror'>: [Errno 8] nodename nor servname provided, or not known)
<Greenlet at 0x109b790f0: <bound method AsyncRequest.send of <grequests.AsyncRequest object at 0x10999ef50>>(stream=False)> failed with ConnectionError
Run Code Online (Sandbox Code Playgroud)

在我退出python之前,我无法再提出任何请求,但是一旦我重新启动python,我就可以再发出200个请求.

我尝试过使用grequests.map(rs,size=200)但似乎什么也没做.

python http-get grequests

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

如何告诉R6类如何处理方括号?

我有一个R6类,它具有属性a data.table.让我们说它看起来像这样:

library(R6)
library(data.table)

foo <- R6Class(
  classname = 'foo',
  public = list(
    dt = NA,
    initialize = function(dt) {
      self$dt <- dt
    }
  )
)

set.seed(123)
dt <- data.table(col1 = rnorm(10), col2 = rnorm(10))

bar <- foo$new(dt)
Run Code Online (Sandbox Code Playgroud)

我想这样做:

bar[<data.table stuff>]
Run Code Online (Sandbox Code Playgroud)

做这个:

bar$dt[<data.table stuff>]
Run Code Online (Sandbox Code Playgroud)

可能吗?

r data.table r6

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

为什么将这个循环包装在函数中可以将速度提高 8 倍?

我试图更深入地了解 R 中的循环与 *apply 函数。在这里,我做了一个实验,用 3 种不同的方式计算前 10,000 个三角形数。

  1. unwrapped:一个简单的for循环
  2. wrapped:我采用与之前完全相同的循环,但将其包装在一个函数中。
  3. vapply:使用vapply匿名函数。

结果在两个方面让我感到惊讶。

  1. 为什么wrapped比 (?!?!) 快 8 倍,unwrapped我的直觉是给定wrapped实际上做了更多的事情(定义一个函数然后调用它),它应该更慢。
  2. 为什么它们都比 vapply 快得多?我希望 vapply 能够进行某种优化,其性能至少与循环一样好。
microbenchmark::microbenchmark(
  unwrapped = {
    x <- numeric(10000)
    for (i in 1:10000) {
      x[i] <- i * (i + 1) / 2
    }
    x
  },
  wrapped = {
    tri_nums <- function(n) {
      x <- numeric(n)
      for (i in 1:n) {
        x[i] <- i * (i + 1) …
Run Code Online (Sandbox Code Playgroud)

for-loop r lapply

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

是否可以让“dput”返回在封闭环境之外运行的源代码?

假设我有一个闭包add_y(y),它返回一个添加到其输入的函数y

add_y <- function(y) {
  function(x) {
    x + y
  }
}
add_4 <- add_y(4)
Run Code Online (Sandbox Code Playgroud)

因此 的值add_4是一个将其输入加 4 的函数。这有效。我想用来展示asdput的定义add_4

function(x) {
  x + 4
}
Run Code Online (Sandbox Code Playgroud)

但这不是 dput 返回的内容。

add_y <- function(y) {
  function(x) {
    x + y
  }
}
add_4 <- add_y(4)
dput(add_4)
#> function (x) 
#> {
#>     x + y
#> }
Run Code Online (Sandbox Code Playgroud)

有没有办法获取可以在封闭环境之外运行的源代码?

closures r r-environment

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

如何从IronPython更新WPF DataGrid行的值?

我有一个简单的WPF应用程序.这是WPF代码

<Window 
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       Title="WpfApplication3" Height="300" Width="300"> 
       <Grid>
        <DataGrid x:Name="dg" Margin="0" Height="149" Width="136">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding value}" ClipboardContentBinding="{x:Null}"/>
            </DataGrid.Columns>
        </DataGrid>
        <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="109,230,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

这是python代码:

import wpf

from System.Windows import Application, Window, MessageBox
from time import sleep

class MyWindow(Window):
    def __init__(self):
        self.value = Value()
        wpf.LoadComponent(self, 'WpfApplication3.xaml')

        self.dg.Items.Add(self.value)

    def button_Click(self, sender, e):
        self.value.increment()
        MessageBox.Show(str(self.value.value))

class Value:
    def __init__(self):
        self.value = 1

    def increment(self):
        self.value += 1

if __name__ == '__main__':
    Application().Run(MyWindow())
Run Code Online (Sandbox Code Playgroud)

我期望的行为是,在单击按钮时,DataGrid中的值应该更新.当我启动应用程序时,一个条目在列中的值为1,但它不会在按钮单击时更新.MessageBox确认正在更新该值,但DataGrid未看到该值已更新.我哪里错了?

python wpf ironpython

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

如何列出R中所有唯一的数据点对?

所以我有两个数据点向量,我想列出每个唯一对的列表,以及该对的频率.我知道我可以使用表格用其中一个向量来做这个,但我似乎无法弄清楚如何用对来做它.

r unique frequency

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

在 RODBC 中执行以分号分隔的多条语句

我有一个相当复杂的 SQL 查询,我试图通过 RODBC 运行该查询,其中涉及定义变量。简化版本如下所示:

DECLARE @VARX CHAR = 'X';
SELECT * FROM TABLE WHERE TYPE = @VARX;
Run Code Online (Sandbox Code Playgroud)

运行这段代码效果很好。这失败了:

library(RODBC)
q <- "DECLARE @VARX CHAR = 'X';\nSELECT * FROM TABLE WHERE TYPE = @VARX;"
sqlQuery(ch, q)
# returns character(0)
Run Code Online (Sandbox Code Playgroud)

我通过实验发现,分号之前的第一条语句被执行了,但其余的则没有执行。没有错误——只是分号后面的所有内容似乎都被忽略了。有没有办法执行完整的查询?

顺便说一句,我正在使用 SQL Server。

注意:我之前问过这个问题,它被标记为这个问题的重复,但他们问的是完全不同的事情。在这个问题中,我想执行一个包含多个语句的脚本,而在另一个问题中,作者只想执行一个语句。

sql r rodbc

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

在dplyr中计算组内比例的更优雅的方法是什么?

给定一个data_frame df <- data_frame(X = c('A', 'A', 'B', 'B', 'B'), Y = c('M', 'N', 'M', 'M', 'N')),我需要拿出一个data_frame它告诉我们,50%A的是M,50%A的是N,67%B的是M,与33%B的是N.

我有一个小常规用来做它,但它看起来很可怕.

library(tidyverse)
df <- data_frame(X = c('A', 'A', 'B', 'B', 'B'), Y = c('M', 'N', 'M', 'M', 'N')) 
# here we go...
df %>% 
  group_by(X) %>% 
  mutate(n_X = n()) %>% 
  group_by(X, Y) %>% 
  summarise(PERCENT = n() / first(n_X))
Run Code Online (Sandbox Code Playgroud)

哪个输出,

Source: local data frame [4 x 3] …
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyverse

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

如何使用 dplyr 计算嵌套 data_frames 中的行数

这是一个愚蠢的示例数据框:

\n\n
df <- data_frame(A = c(rep(1, 5), rep(2, 4)), B = 1:9) %>% \n  group_by(A) %>% \n  nest()\n
Run Code Online (Sandbox Code Playgroud)\n\n

看起来像这样:

\n\n
> df\n# A tibble: 2 \xc3\x97 2\n      A             data\n  <dbl>           <list>\n1     1 <tibble [5 \xc3\x97 1]>\n2     2 <tibble [4 \xc3\x97 1]>\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想添加第三列,其N条目等于每个嵌套 data_frame 中的行数data。我想这会起作用:

\n\n
> df %>% \n+   mutate(N = nrow(data))\nError: Unsupported type NILSXP for column "N"\n
Run Code Online (Sandbox Code Playgroud)\n\n

出了什么问题?

\n

r split-apply-combine dplyr

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

使用dplyr将编码为"Y"/"N"的所有变量转换为TRUE/FALSE

我有以下数据

df <- data.frame(A = 1:3, YN_B = c('Y', 'N', 'N'), YN_C = c('N', 'N', 'Y'))
Run Code Online (Sandbox Code Playgroud)

这些带有c('Y','N')值的变量对我来说并不是很有用.对于'Y',它们将更有用,编码为TRUE,对于'N',编码为FALSE.有用的是,Y/N列的命名方式可以让我以编程方式找到它们.我认为那mutate_if应该是一个帮助.

我试图用mutate_if实现这一点,我之前没有使用过,但它并不是很有效.这是我的尝试

df %>% mutate_if(matches('^YN'), .funs = funs(function(x) x == 'Y'))
Error in get(as.character(FUN), mode = "function", envir = envir) : 
  object 'p' of mode 'function' was not found
Run Code Online (Sandbox Code Playgroud)

我哪里错了?

r dplyr

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