小编Ale*_*lex的帖子

data.table中的动态列名称

我正在尝试向我添加列data.table,其中名称是动态的.另外,我需要by在添加这些列时使用参数.例如:

test_dtb <- data.table(a = sample(1:100, 100), b = sample(1:100, 100), id = rep(1:10,10))
cn <- parse(text = "blah")
test_dtb[ , eval(cn) := mean(a), by = id]

# Error in `[.data.table`(test_dtb, , `:=`(eval(cn), mean(a)), by = id) : 
#  LHS of := must be a single column name when with=TRUE. When with=FALSE the LHS may be a vector of column names or positions.
Run Code Online (Sandbox Code Playgroud)

另一种尝试:

cn <- "blah"
test_dtb[ , cn := mean(a), by = id, with …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

计算加权平均值和标准差

我有一个时间序列x_0 ... x_t.我想计算数据的指数加权方差.那是:

V = SUM{w_i*(x_i - x_bar)^2, i=1 to T} where SUM{w_i} = 1 and x_bar=SUM{w_i*x_i}
Run Code Online (Sandbox Code Playgroud)

参考:http://en.wikipedia.org/wiki/Weighted_mean#Weighted_sample_variance

目标是基本上加重观察的时间进一步缩短.这很容易实现,但我想尽可能多地使用内置的功能.有谁知道这对应于R?

谢谢

statistics r mean weighted

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

按名称取消选择列

有没有办法选择数据框的所有列,除了具有特定名称的列.

它是模拟的df[, -1],除了使用列名而不是索引?

indexing r slice dataframe

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

附加到具有动态名称的列表,R

我在R中有一个列表:

a <- list(n1 = "hi", n2 = "hello")
Run Code Online (Sandbox Code Playgroud)

我想附加到这个命名列表,但名称必须是动态的.也就是说,它们是从字符串创建的(例如:paste("another","name",sep="_")

我尝试这样做不起作用:

c(a, parse(text="paste(\"another\",\"name\",sep=\"_\")=\"hola\"")
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?最终目标只是附加到此列表并动态选择我的名字.

r list append names

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

带有field.types的RMySQL dbWriteTable

我有一个名为的数据框,df如下所示:

dte, val
2012-01-01, 23.2323
2012-01-02, 34.343
Run Code Online (Sandbox Code Playgroud)

列上的类型是日期和数字.我想使用已经打开的连接将其写入MySQL数据库.连接工作正常,因为我能够查询db罚款.我尝试运行以下内容:

dbWriteTable(con, name="table_name", value=df, field.types=list("date", "double(20,10)"))
Run Code Online (Sandbox Code Playgroud)

这会生成错误:

函数错误(classes,fdef,mtable):无法找到函数"make.db.names"的继承方法,签名为"MySQLConnection","NULL"

如果我没有指定field.types,并运行:

dbWriteTable(con, name="table_name", value=df)
Run Code Online (Sandbox Code Playgroud)

我收到错误:

mysqlExecStatement(conn,statement,...)出错:RS-DBI驱动程序:(无法运行语句:BLOB/TEXT列'dte'在密钥规范中使用,没有密钥长度)

任何人都可以对此有所了解吗?

谢谢

mysql sql rdbms r rmysql

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

向上移动一帧,调试R环境

在调试函数时,我想向上移动到父框架并查看那里的一些变量.我该怎么做呢?

这是一个示例:

f <- function() {
   x <-1
   g(x+1)
}
g <- function(z) {
   y = z+2
   return(y)
}
Run Code Online (Sandbox Code Playgroud)

然后我使用debug("g")和调试这两个函数debug("f").当我最终进入gBrowser>,我想回到f检查x.

谢谢

debugging r frame

19
推荐指数
2
解决办法
2149
查看次数

在R中的data.table环境中创建一个公式

我想在一个内部进行回归data.table.的formula要被动态构造的需求.我尝试了以下方法:

x = data.table(a=1:20, b=20:1, id=1:5)
> x[,as.list(coef(lm(as.formula("a ~ b")))),by=id]
  Error in eval(expr, envir, enclos) : object 'a' not found
Run Code Online (Sandbox Code Playgroud)

如何将环境指定为进行评估的实际data.table的环境?

编辑:我意识到我可以做lm(a~b).我需要公式是动态的,所以它被构建为一个字符串.通过动态我的意思是公式可以在paste0(var_1, "~", var_2)哪里var_1 = avar_2 = b

这是一个解决方案,我认为我们可以做得更好:

txt = parse(text="as.list(coef(lm(a ~ b)))")
> x[,eval(txt),by=id]
  id (Intercept)  b
  1:  1          21 -1
  2:  2          21 -1
  3:  3          21 -1
  4:  4          21 -1
  5:  5          21 -1
Run Code Online (Sandbox Code Playgroud)

environment r data.table

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

R,深拷贝和浅拷贝,通过引用传递

我想了解R在将参数传递给函数,创建变量副本等时使用的逻辑与内存使用情况有关.它什么时候实际创建变量的副本而不是仅仅传递对该变量的引用?特别是我很好奇的情况是:

f <- function(x) {x+1}
a <- 1
f(a)
Run Code Online (Sandbox Code Playgroud)

a字面意思传递还是被传递的参考?

x <- 1
y <- x
Run Code Online (Sandbox Code Playgroud)

复制参考?什么时候不是这样的?

如果有人能向我解释这一点,我将非常感谢.

copy r reference deep-copy data.table

18
推荐指数
2
解决办法
8991
查看次数

setkey和:=运算符,data.table,R

使用data.table包装时,我有点不确定何时需要setkey().例如,当使用:=带有by选项的运算符时,即使我没有设置键,事情似乎仍然非常快.有人可以在setkey()必要时和不在时说明吗?如果在调用之前没有必要:=,by那么data.table包是如此快速,因为大概它必须通过执行顺序搜索而不是二进制搜索来执行与apply标准data.frameR 相同的操作,因为它不知道我data.table是否实际上按参数排序by.

谢谢

r apply dataframe data.table

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

每第n个点求和

我有一个向量,我需要对每个n数字求和并返回结果.这是我计划当前这样做的方式.有更好的方法吗?

v = 1:100
n = 10
sidx = seq.int(from=1, to=length(v), by=n)
eidx = c((sidx-1)[2:length(sidx)], length(v))
thesum = sapply(1:length(sidx), function(i) sum(v[sidx[i]:eidx[i]]))
Run Code Online (Sandbox Code Playgroud)

这给出了:

thesum
 [1]  55 155 255 355 455 555 655 755 855 955
Run Code Online (Sandbox Code Playgroud)

r sum apply

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