我有一个看起来像这样的数据框
> 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) 我对这一切都很陌生; 我需要获得数千个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)但似乎什么也没做.
我有一个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 中的循环与 *apply 函数。在这里,我做了一个实验,用 3 种不同的方式计算前 10,000 个三角形数。
unwrapped:一个简单的for循环wrapped:我采用与之前完全相同的循环,但将其包装在一个函数中。vapply:使用vapply匿名函数。结果在两个方面让我感到惊讶。
wrapped比 (?!?!) 快 8 倍,unwrapped我的直觉是给定wrapped实际上做了更多的事情(定义一个函数然后调用它),它应该更慢。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) 假设我有一个闭包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)
有没有办法获取可以在封闭环境之外运行的源代码?
我有一个简单的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未看到该值已更新.我哪里错了?
所以我有两个数据点向量,我想列出每个唯一对的列表,以及该对的频率.我知道我可以使用表格用其中一个向量来做这个,但我似乎无法弄清楚如何用对来做它.
我有一个相当复杂的 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。
注意:我之前问过这个问题,它被标记为这个问题的重复,但他们问的是完全不同的事情。在这个问题中,我想执行一个包含多个语句的脚本,而在另一个问题中,作者只想执行一个语句。
给定一个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) 这是一个愚蠢的示例数据框:
\n\ndf <- data_frame(A = c(rep(1, 5), rep(2, 4)), B = 1:9) %>% \n group_by(A) %>% \n nest()\nRun 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]>\nRun Code Online (Sandbox Code Playgroud)\n\n我想添加第三列,其N条目等于每个嵌套 data_frame 中的行数data。我想这会起作用:
> df %>% \n+ mutate(N = nrow(data))\nError: Unsupported type NILSXP for column "N"\nRun Code Online (Sandbox Code Playgroud)\n\n出了什么问题?
\n我有以下数据
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)
我哪里错了?