相关疑难解决方法(0)

使用以下内容分配多个列:= data.table,group

使用分配给多个列的最佳方法是什么data.table?例如:

f <- function(x) {c("hi", "hello")}
x <- data.table(id = 1:10)
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情(当然这种语法不正确):

x[ , (col1, col2) := f(), by = "id"]
Run Code Online (Sandbox Code Playgroud)

为了扩展它,我可能有很多列的名称存储在一个变量(比如说col_names)中,我想这样做:

x[ , col_names := another_f(), by = "id", with = FALSE]
Run Code Online (Sandbox Code Playgroud)

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

r variable-assignment dataframe data.table colon-equals

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

按组获取最高值

这是一个示例数据框:

d <- data.frame(
  x   = runif(90),
  grp = gl(3, 30)
) 
Run Code Online (Sandbox Code Playgroud)

我想要d包含x每个值的前5个值的行的子集grp.

使用base-R,我的方法是这样的:

ordered <- d[order(d$x, decreasing = TRUE), ]    
splits <- split(ordered, ordered$grp)
heads <- lapply(splits, head)
do.call(rbind, heads)
##              x grp
## 1.19 0.8879631   1
## 1.4  0.8844818   1
## 1.12 0.8596197   1
## 1.26 0.8481809   1
## 1.18 0.8461516   1
## 1.29 0.8317092   1
## 2.31 0.9751049   2
## 2.34 0.9269764   2
## 2.57 0.8964114   2
## 2.58 0.8896466   2 …
Run Code Online (Sandbox Code Playgroud)

r dplyr data.table

76
推荐指数
4
解决办法
7万
查看次数

在一个函数调用中向R data.table添加多个列?

我有一个函数,在列表中返回两个值.这两个值都需要添加到两个新列的data.table中.对功能的评估是昂贵的,所以我想避免必须两次计算功能.这是一个例子:

library(data.table)
example(data.table)
DT
   x y  v
1: a 1 42
2: a 3 42
3: a 6 42
4: b 1  4
5: b 3  5
6: b 6  6
7: c 1  7
8: c 3  8
9: c 6  9
Run Code Online (Sandbox Code Playgroud)

这是我的功能的一个例子.记住我说这是昂贵的计算,除此之外,没有办法从其他给定值中推导出一个返回值(如下例所示):

myfun <- function (y, v) 
{
ret1 = y + v
ret2 = y - v
return(list(r1 = ret1, r2 = ret2))
}
Run Code Online (Sandbox Code Playgroud)

这是我在一个语句中添加两列的方法.那个人需要两次打电话给myfun:

DT[,new1:=myfun(y,v)$r1][,new2:=myfun(y,v)$r2]

   x y  v new1 new2
1: a 1 42   43  -41 …
Run Code Online (Sandbox Code Playgroud)

r data.table

67
推荐指数
1
解决办法
8万
查看次数