Dun*_*ray 0 r dplyr data.table purrr
我刚刚开始使用data.table来分析一些高维数据,其中有几个簇和几个标记。我希望能够使用“ by”功能,但能够访问组外的数据,即by =!group。我正在尝试比较该组与非该组的统计信息。
我浏览了文档,.SD看起来很吸引人,但似乎并不能完全解决我的问题,因为它只允许访问分组的data.table。我确定我可以使用循环或应用来完成此操作,但是我认为这不会像使用data.table那样快。
library(data.table)
library(purrr)
data.table(iris) %>%
melt %>%
.[, .(mean = mean(value)), by = .(Species, variable)] %>%
dcast(Species ~ variable)
Run Code Online (Sandbox Code Playgroud)
这使我可以获得该组的摘要统计信息:
# Species Sepal.Length Sepal.Width Petal.Length Petal.Width
# 1: setosa 5.006 3.428 1.462 0.246
# 2: versicolor 5.936 2.770 4.260 1.326
# 3: virginica 6.588 2.974 5.552 2.026
Run Code Online (Sandbox Code Playgroud)
但是说我想按组找到均值-用!group找到均值
data.table(iris) %>%
melt %>%
.[variable == "Petal.Length"] %>%
.[, group := Species == "setosa"] %>%
.[, .(means = mean(value)), by = group]
# group means
# 1: TRUE 1.462
# 2: FALSE 4.906
Run Code Online (Sandbox Code Playgroud)
这将是为一个聚类(setosa)和一个标记(Petal.Length)找到它的一种方法,但是我看不到如何扩大它。
这是你想要的吗?
library(data.table)
dt <- data.table(iris)
molten_dt <- melt(dt)
molten_dt[, .(means = mean(value),
other_means = mean(molten_dt[Species != .BY[[1]] & variable == .BY[[2]], value])
),
by = .(Species, variable)]
Species variable means other_means
1: setosa Sepal.Length 5.006 6.262
2: versicolor Sepal.Length 5.936 5.797
3: virginica Sepal.Length 6.588 5.471
4: setosa Sepal.Width 3.428 2.872
5: versicolor Sepal.Width 2.770 3.201
6: virginica Sepal.Width 2.974 3.099
7: setosa Petal.Length 1.462 4.906
8: versicolor Petal.Length 4.260 3.507
9: virginica Petal.Length 5.552 2.861
10: setosa Petal.Width 0.246 1.676
11: versicolor Petal.Width 1.326 1.136
12: virginica Petal.Width 2.026 0.786
Run Code Online (Sandbox Code Playgroud)
要了解发生了什么,此代码有助于运行:
molten_dt[, print(.BY), by = .(Species, variable)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |