如何解决R data.table使用变量名在分组依据中进行分配
我正在尝试使用字符变量作为新列的名称以及by
来总结data.table。
library(data.table)
dt <- data.table(g = rep(1:3,4),xa = runif(12),xb = runif(12))
# desired output
dt[,.(sa = mean(xa)),by = g]
g sa
1: 1 1.902360
2: 2 2.149041
3: 3 2.586044
问题是下面的代码仍然返回整个data.table,而不只是减少g的唯一值。
cn <- paste0('s','a')
# returns all rows
dt[,(cn) := mean(xa),by = g][]
g xa xb sa
1: 1 0.3423699 0.81447505 0.4755900
2: 2 0.0932055 0.06853225 0.5372602
3: 3 0.2486223 0.13286546 0.6465111
4: 1 0.6942175 0.66405944 0.4755900
5: 2 0.7225208 0.83110248 0.5372602
6: 3 0.9898293 0.09520907 0.6465111
7: 1 0.3523753 0.72743182 0.4755900
8: 2 0.5504942 0.01966303 0.5372602
9: 3 0.3523625 0.55257436 0.6465111
10: 1 0.5133974 0.39650089 0.4755900
11: 2 0.7828203 0.89909528 0.5372602
12: 3 0.9952302 0.16872205 0.6465111
如何获取通常的汇总data.table? (这是一个简化的示例。在我的实际问题中,将有多个名称传递给循环)
解决方法
有一个待定的PR,它将使这种操作更加容易, data.table#4304。在当前设计中实施后,查询将如下所示:
dt[,.(cn = mean(xa)),by = g,env = list(cn="sa")]
# g sa
# <int> <num>
#1: 1 0.2060352
#2: 2 0.1707827
#3: 3 0.6850591
安装PR分支
remotes::install_github("Rdatatable/data.table@programming")
数据
library(data.table)
dt <- data.table(g = rep(1:3,4),xa = runif(12),xb = runif(12))
,
要么使用 <meta-data
android:name="android.app.default_searchable"
android:value=".SearchResultsActivity" />
包裹在setNames
(list
)列中,要么
.(mean(xa))
或dt[,setNames(.(mean(xa)),cn),by = g]
# g sa
#1: 1 0.2010599
#2: 2 0.4710056
#3: 3 0.4871248
在获得摘要输出后
setnames
在setnames(dt[,mean(xa),by = g],'V1',cn)[]
中,data.table
运算符用于在原始数据集中创建/修改列。但是,此运算符在:=
上下文中使用时会有所不同
tidyverse
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。