是否可以对data.R表的by参数中的列求反

是否可以对data.R表的by参数中的列求反,r,data.table,R,Data.table,我想指定sum列和groupby剩余列。似乎无法像.SDcols那样对by参数中的列求反。对吗?我已经找到了另一种方法,但是我想知道我是否丢失了一些数据 a=data.table(a=c(1,3,1), b=c(2,2,3), c=c(5,6,7)) not_gp = c('b','c') # this works but is not what I want! a[,lapply(.SD,sum),by=not_gp,.SDcols =!not_gp] # what I want, bu

我想指定sum列和groupby剩余列。似乎无法像.SDcols那样对by参数中的列求反。对吗?我已经找到了另一种方法,但是我想知道我是否丢失了一些数据

a=data.table(a=c(1,3,1), b=c(2,2,3), c=c(5,6,7))

not_gp = c('b','c')
# this works but is not what I want!
a[,lapply(.SD,sum),by=not_gp,.SDcols =!not_gp]


# what I want, but doesn't work
a[,lapply(.SD,sum),by=!not_gp,.SDcols =not_gp]
# Error in !not_gp : invalid argument type
#does work
gp = names(a)[!names(a) %in% not_gp]
a[,lapply(.SD,sum),by=gp,.SDcols =not_gp]
# also works
a[,lapply(.SD,sum),by=gp]
您可以使用:

a[, lapply(.SD, sum), by = setdiff(names(a), not_gp), .SDcols = not_gp]
这给了你:

   a b  c
1: 1 5 12
2: 3 2  6

类似于
a[,lappy(.SD,sum),by=setdiff(名称(a),而不是\u gp),.SDcols=not\u gp]
?虽然没有使用数据表魔术:(
x[x%in%y]
is
intersect(x,y)
编辑后:
x[!x%in%y]
is
setdiff(x,y)
如上一条评论所述。@Frank,很抱歉我的代码中有一个输入错误,所以setdiff是我的意图,只是让你知道函数的相关信息。我很确定目前没有比setdiff更好的方法。如果对你有效,你可以让UserXYZ作为答案发布。@User2321请作为答案发布。@User2321不直接支持由