相关疑难解决方法(0)

如何在执行以下操作时更改目标列的类型:=在R中的data.table中的组?

我正在尝试:= group by一个类型为'integer'的现有列,其中新值的类型为'double',但失败了.

我的场景是根据其他列中的值将表示时间的列变为POSIXct.我可以修改data.table的创建作为一种解决方法,但我仍然对如何实际更改列的类型感兴趣,正如错误消息中所建议的那样.

这是我的问题的简单玩具示例:

db = data.table(id=rep(1:2, each=5), x=1:10, y=runif(10))
db
id  x          y
 1:  1  1 0.47154470
 2:  1  2 0.03325867
 3:  1  3 0.56784494
 4:  1  4 0.47936031
 5:  1  5 0.96318208
 6:  2  6 0.83257416
 7:  2  7 0.10659533
 8:  2  8 0.23103810
 9:  2  9 0.02900567
10:  2 10 0.38346531

db[, x:=mean(y), by=id]   

Error in `[.data.table`(db, , `:=`(x, mean(y)), by = id) : 
Type of RHS ('double') must match LHS ('integer'). To check and coerce …
Run Code Online (Sandbox Code Playgroud)

types r data.table

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

规范化每行data.table

这似乎应该很容易,但我找不到答案:(.我正在尝试规范化data_table的每一行,如下所示:

normalize <- function(x) {
  s = sum(x)
  if (s>0) {
    return(x/s)
  } else {
    return 0
  }
}
Run Code Online (Sandbox Code Playgroud)

如何在data.table的每一行上调用此函数并获取规范化的data.table?我可以做一个for循环,但这肯定不是正确的方法,并且apply(data, 1, normalize),据我所知,将我的data.table转换为一个性能很大的矩阵.

performance r normalization data.table

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

标签 统计

data.table ×2

r ×2

normalization ×1

performance ×1

types ×1