小编edd*_*ddi的帖子

跨组的最新值的总和

对于我的每行数据,我想计算最近的和value每个group:

dt = data.table(group = c('a','b','a','a','b','a'),
                value = c(10, 5, 20, 15, 15, 10),
                desired = c(10, 15, 25, 20, 30, 25))
#   group value desired
#1:     a    10      10
#2:     b     5      15
#3:     a    20      25  # latest value of a is 20, of b is 5
#4:     a    15      20  # latest value of a is 15, of b is 5
#5:     b    15      30
#6:     a    10      25
Run Code Online (Sandbox Code Playgroud)

desired column是我想要实现的,我可以用一个简单的循环来完成这个,但是我的数据非常庞大,有很多行和组(1M +行,1000多个组).

for …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

dplyr和POSIXlt数据存在问题

我有个问题.我下载了数据并将日期转换为POSIXlt格式

df<-read.csv("007.csv", header=T, sep=";")
df$transaction_date<-strptime(df$transaction_date, "%d.%m.%Y")
df$install_date<-strptime(df$install_date, "%d.%m.%Y")
df$days<- as.numeric(difftime(df$transaction_date,df$install_date, units = "days"))
Run Code Online (Sandbox Code Playgroud)

数据框是关于一个在线游戏中的交易.它包含值(支付),transaction_date,intall_date和ID.我添加了新列,安装后显示.我试图使用dlyr汇总数据

df2<-df %>% group_by(days) %>% summarise(sum=sum(value))

我有一个错误:错误:列'transaction_date'具有不受支持的类型:POSIXlt,POSIXt

我该如何解决?

UPD.我将Date列的类更改为Character.它解决了问题.但是我可以使用dlyr而不更改我的数据集中的类吗?

r dplyr posixlt

23
推荐指数
2
解决办法
2万
查看次数

无法将unicode .csv读入R

我有一个.csv文件,其中包含以下数据:

"?","?"
1,10
2,20
Run Code Online (Sandbox Code Playgroud)

我无法将其读入R中,以便列名显示在文件中.

d <- read.csv("./Data/1.csv", fileEncoding="UTF-8")
head(d)
Run Code Online (Sandbox Code Playgroud)

产生以下内容:

> d <- read.csv("./Data/1.csv", fileEncoding="UTF-8")
Warning messages:
1: In read.table(file = file, header = header, sep = sep, quote = quote,  :
  invalid input found on input connection './Data/1.csv'
2: In read.table(file = file, header = header, sep = sep, quote = quote,  :
  incomplete final line found by readTableHeader on './Data/1.csv'
> head(d)
[1] X.
<0 rows> (or 0-length row.names)
Run Code Online (Sandbox Code Playgroud)

同时,在不指定fileEncoding的情况下执行相同操作会产生以下结果:

> d <- read.csv("./Data/1.csv")
> head(d)
  Ô. …
Run Code Online (Sandbox Code Playgroud)

windows csv r utf-8 read.table

21
推荐指数
2
解决办法
2万
查看次数

eval和data.table中的引用

我在这里错过了什么?

d = data.table(a = 1:5)

d[, a]                   # 1 2 3 4 5
d[, sum(a)]              # 15

d[, eval(quote(a))]      # 1 2 3 4 5
d[, sum(eval(quote(a)))] # 15

quoted_a = quote(a)
d[, eval(quoted_a)]      # 1 2 3 4 5
d[, sum(eval(quoted_a))] # Error in eval(expr, envir, enclos) : object 'a' not found
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?我跑R 2.15.0data.table 1.8.9.

r data.table

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

dplyr join定义NA值

我可以在dplyr join中为NA定义"填充"值吗?例如,在连接中定义所有NA值应为1?

require(dplyr)
lookup <- data.frame(cbind(c("USD","MYR"),c(0.9,1.1)))
names(lookup) <- c("rate","value")
fx <- data.frame(c("USD","MYR","USD","MYR","XXX","YYY"))
names(fx)[1] <- "rate"
left_join(x=fx,y=lookup,by=c("rate"))
Run Code Online (Sandbox Code Playgroud)

上面的代码将为值"XXX"和"YYY"创建NA.在我的情况下,我加入了大量的列,将会有很多不匹配.所有不匹配应具有相同的值.我知道我可以分几步完成,但问题是一切都可以完成吗?谢谢!

r left-join na dplyr

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

变量名称的反引号

如果我在名称中创建一个带反引号的变量,是否有办法使用反引号语法来访问它?

assign("a`b", 5)
get("a`b")
#[1] 5

# The attempts below all end in various errors
# `a`b`
# `a``b`
# `a\\`b`
Run Code Online (Sandbox Code Playgroud)

syntax r

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

在dplyr中导致长度不等于1或组长度的分组操作

我不确定使用哪个函数来执行以下操作:

library(data.table)
dt = data.table(a = 1:4, b = 1:2)

dt[, rep(a[1], 3), by = b]
#   b V1
#1: 1  1
#2: 1  1
#3: 1  1
#4: 2  2
#5: 2  2
#6: 2  2
Run Code Online (Sandbox Code Playgroud)

双方summarisemutate不满意这个长度:

library(dplyr)
df = data.frame(a = 1:4, b = 1:2)

df %.% group_by(b) %.% summarise(rep(a[1], 3))
#Error: expecting a single value

df %.% group_by(b) %.% mutate(rep(a[1], 3))
#Error: incompatible size (3), expecting 2 (the group size) or 1
Run Code Online (Sandbox Code Playgroud)

r dplyr data.table

15
推荐指数
2
解决办法
6372
查看次数

将未评估的表达式传递给C/C++

我想将一个函数的可变数量的参数传递给C/C++,但是希望保留参数不被评估,同时不希望在R中进行任何计算(除了调用C/C++之外)功能),即我不想调用substitute我的R函数.我认为我可以使用的一个选项就是.External像这样做smth:

R_fn = function(...) .External("cpp_fn", ...)

...
# and in C code:
SEXP cpp_fn (SEXP arglist) {
}
Run Code Online (Sandbox Code Playgroud)

然而,.External正在评估参数...,所以如果我尝试类似的东西

rm(x, y) # just making sure these don't exist

R_fn(x*y)
Run Code Online (Sandbox Code Playgroud)

我收到错误,因为R x*y 将其发送到函数之前尝试进行评估.

相比之下,R中的以下作品:

f = function(...) g(...)
g = function(x, ...) print(substitute(x))

f(x*y*z)
# x * y * z
Run Code Online (Sandbox Code Playgroud)

我还有其他选择吗?显然,它可以做,因为R本身为许多功能做了它,例如substitute它本身,但我不明白该怎么做.我添加了rcpp标签,因为我最终会使用这个标签Rcpp.

c r rcpp

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

派生类的模板特化

我有一个模板类(我无法修改),让我们称之为SomeClass,我想专门研究仅从特定类派生的类.根据这个答案,我能够在gcc 6.3.1中做到这一点,但不幸的是我需要在gcc 4.9.2中完成它,并且它在编译时失败说"部分特化SomeClass<T>不会专门化任何模板参数".

有什么办法可以改变下面的内容,使其与gcc 4.9.2一起使用吗?

#include <iostream>
#include <string>

using namespace std;

struct A {
    string name() { return "A"; }
};

struct B : A {
    string name() { return "B"; }
};

struct C {
    string name() { return "C"; }
};

template<typename T, typename = std::enable_if_t<std::is_base_of<A, T>::value>>
using enable_if_a = T;

template<typename T>
struct SomeClass {
    using Type = T;
};

template<typename T>
struct SomeClass<enable_if_a<T>>
{
    using Type = …
Run Code Online (Sandbox Code Playgroud)

c++ templates sfinae c++11

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

如何在不知道Rcpp类型的情况下处理向量

我想复制以下R函数Rcpp:

fR = function(x) x[1:2]

fR(c(1,2,3))
#[1] 1 2
fR(c('a','b','c'))
#[1] "a" "b"
Run Code Online (Sandbox Code Playgroud)

我可以这样做固定输出类型,如下所示:

library(inline)
library(Rcpp)

fint = cxxfunction(signature(x = "SEXP"), '
          List xin(x);
          IntegerVector xout;

          for (int i = 0; i < 2; ++i) xout.push_back(xin[i]);

          return xout;', plugin = "Rcpp")
Run Code Online (Sandbox Code Playgroud)

但是这只适用于整数,如果我尝试用(或者,它们是相同的)替换xout类型- 它适用于任何输入类型,但我得到一个而不是一个向量.ListGenericVectorlist

Rcpp这样做的正确方法是什么?

r rcpp

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

标签 统计

r ×9

data.table ×3

dplyr ×3

rcpp ×2

c ×1

c++ ×1

c++11 ×1

csv ×1

left-join ×1

na ×1

posixlt ×1

read.table ×1

sfinae ×1

syntax ×1

templates ×1

utf-8 ×1

windows ×1