r - 在 data.table 中使用带有 .SD 的其他列
问题描述
我正在尝试将 .SD 与汇总操作中的其他一些列结合起来,但这会导致结果不正确(为了我的目标)。对于(一个愚蠢的)例子:
library(data.table)
t <- as.data.table(mtcars)
t[, list(cyl = sum(cyl), lapply(.SD, mean)), .SDcols = c('mpg', 'disp')]
我希望它返回一个具有 1 行和 3 列的 data.table,但它返回的是一个具有 2 行和 2 列的列。有没有解决的办法?
解决方案
问题是list(cyl, lapply(.))
返回的东西不是真正的框架。如果您在data.table
环境之外查看它,它看起来像:
str(list(cyl = sum(t$cyl), lapply(t[,c("mpg","disp")], mean)))
# List of 2
# $ cyl: num 198
# $ :List of 2
# ..$ mpg : num 20.1
# ..$ disp: num 231
当更好的回报看起来像这样时:
str(c(list(cyl = sum(t$cyl)), lapply(t[,c("mpg","disp")], mean)))
# List of 3
# $ cyl : num 198
# $ mpg : num 20.1
# $ disp: num 231
相反,c
连接两个列表:
t[, c(list(cyl = sum(cyl)), lapply(.SD, mean)), .SDcols = c('mpg', 'disp')]
# cyl mpg disp
# <num> <num> <num>
# 1: 198 20.09062 230.7219
或者只是将一个数字连接sum(cyl)
到lapply
列表中(感谢 BrianMontgomery):
t[, c(cyl = sum(cyl), lapply(.SD, mean)), .SDcols = c('mpg', 'disp')]
推荐阅读
- prolog - 在第三个列表中连接两个列表
- php - Laravel 8 password.confirm 功能无法正常工作,导致找不到路由错误
- azure-active-directory - 如何使用用户凭据调用 Microsoft Graph APIs for Teams
- c++ - MPI_Broadcast 大量元素的最有效方法是什么?
- java - 如何使用 JWT 身份验证处理 API REST 上的身份验证异常?
- c++ - getting output in online ide but not getting in my pc even after restarting
- string - 在 NASM 中输入大字符串时出错
- python - 我将如何更改我的应用程序的背景颜色?
- twig - 如果连续一根树枝,则错误无法使用标准代码
- php - 相对路径 URL 正在下载而不是重定向