Я только начинаю использовать data.table для анализа некоторых многомерных данных, где у меня есть несколько кластеров и несколько маркеров. Я хотел бы иметь возможность использовать функцию «by», но иметь возможность доступа к данным вне группы, то есть через =! Group. Я пытаюсь сравнить статистику группы и группы, не относящейся к группе.
Я просмотрел документацию, и .SD выглядит интригующим, но, похоже, не совсем отвечает мнетак как он разрешает доступ только к сгруппированной таблице данных. Я уверен, что могу сделать это, используя цикл или применить, но я не думаю, что это будет почти так же быстро, как если бы это было возможно с data.table.
library(data.table)
library(purrr)
data.table(iris) %>%
melt %>%
.[, .(mean = mean(value)), by = .(Species, variable)] %>%
dcast(Species ~ variable)
Это позволяет мнеполучить сводную статистику для группы:
# 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
Но, скажем, я хотел найти среднее (значение) по группе - среднее (значение) по! 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
Это было быспособ найти его для одного кластера (setosa) и одного маркера (Petal.Length), но я не вижу, как его масштабировать.