对于我的每行数据,我想计算最近的和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) 我有个问题.我下载了数据并将日期转换为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而不更改我的数据集中的类吗?
我有一个.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) 我在这里错过了什么?
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.0和data.table 1.8.9.
我可以在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.在我的情况下,我加入了大量的列,将会有很多不匹配.所有不匹配应具有相同的值.我知道我可以分几步完成,但问题是一切都可以完成吗?谢谢!
如果我在名称中创建一个带反引号的变量,是否有办法使用反引号语法来访问它?
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) 我不确定使用哪个函数来执行以下操作:
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)
双方summarise并mutate不满意这个长度:
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) 我想将一个函数的可变数量的参数传递给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.
我有一个模板类(我无法修改),让我们称之为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) 我想复制以下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这样做的正确方法是什么?