Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在这种情况下,如何更好地处理data.table中的group by?_R_Data.table - Fatal编程技术网

在这种情况下,如何更好地处理data.table中的group by?

在这种情况下,如何更好地处理data.table中的group by?,r,data.table,R,Data.table,假设我有如下数据: dt <- data.table(x=1:5, y=c(1,1,2,2,1), y.z=c(1,1,2,2,3)) 由于我的懒惰,通常我会选择第二种方式,因为如果类似y的参数列表很长,它可以节省一些输入。即写列表(y.z,y1,y2,y3,…)而不是y1=y1[1],y2=y2[1],y3=y3[1],… 然而,我不确定这是否是一个好的做法。特别是如果发生了y中的一些错误,因此每个组的错误并不都相等,我的方法不会触发任何错误,因此问题不会自动检测出来 定制这样的函数最

假设我有如下数据:

dt <- data.table(x=1:5, y=c(1,1,2,2,1), y.z=c(1,1,2,2,3))
由于我的懒惰,通常我会选择第二种方式,因为如果类似y的参数列表很长,它可以节省一些输入。即写
列表(y.z,y1,y2,y3,…)
而不是
y1=y1[1],y2=y2[1],y3=y3[1],…

然而,我不确定这是否是一个好的做法。特别是如果发生了
y
中的一些错误,因此每个组的错误并不都相等,我的方法不会触发任何错误,因此问题不会自动检测出来

定制这样的函数最好吗

 dt[,list(x=sum(x), y=assert.identical(y)]), by=y.z]
因此,如果
y
只包含一个唯一值,它将返回一个标量,否则它将触发异常。但是,自定义函数应用起来有点不方便,因为它需要输入比
y=y[1]
更多的内容


我每天都会遇到这种困境,在R和SQL中,两者都无法治愈。当人们面对它时通常会做什么?

唯一的.data.table
有一个
by
参数,而
.SD
只是一个
数据.table

将这些放在一起可以执行以下操作:

dt[,list(x= unique(.SD[, sum(x)], by=c("y1","y2", "y3")), by=y.z]

请注意,unique中的
by
必须是字符串的向量(列的名称)。这不同于
[.data.table

中对
by
的要求。data.table
有一个
by
参数,
.SD
只是一个
数据。table

将这些放在一起可以执行以下操作:

dt[,list(x= unique(.SD[, sum(x)], by=c("y1","y2", "y3")), by=y.z]

请注意,unique中的
by
必须是字符串向量(列的名称)。这与
[.data.table
)中的
by
的要求不同
dt[,list(x=sum(x)),by=list(y.z,y)]?
它与
dt[,list(x=sum(x)),by=list(y.z,y)]有何区别?