如何在 R 中找到产生最大 colMeans 的簇?
How to find the clusters that produce the maximum colMeans in R?
我有一个像
这样的数据框
V1 V2 V3
1 1 1 2
2 0 1 0
3 3 0 3
....
并且我有一个与数据框中的行数长度相同的向量(如果重要的话,它是来自 kmeans 的 cluster
)
[1] 2 2 1...
从那些我可以得到每个集群的colMeans
,比如
cm1 <- colMeans(df[fit$cluster==1,])
cm2 <- colMeans(df[fit$cluster==2,])
(我不认为我应该明确地做那部分,但这就是我思考问题的方式。)
我想要的是为数据框的每一列获取 colMeans 最大值的向量的值。我也想做(单独做)第二高,第三等。所以在这个例子中我希望输出是一个向量,数据框的每一列都有一个元素:
1 2 1...
因为对于数据框的第一列,第一个聚类的列均值是 3,而第二个聚类的列均值是 0.5。
如果cluster
向量的长度与'df'的行数相同,split
数据由'cluster'列变成list
,
lst1 <- lapply(split(df, fit$cluster), function(x) stack(colMeans(x)))
dat <- do.call(rbind, Map(cbind, cluster = names(lst1), lst1))
aggregate(values ~ ind, dat, FUN = which.max)
如果我们需要根据列均值对多个元素进行子集化,在数据中创建 'cluster' 列,重塑为 'long' 格式(或使用 summarise/across
),按 'cluster'、'name'、获取 'value' 的 mean
、arrange
列 'name' 和 desc
中的 'value'结束顺序,然后 return n
行 slice_head
library(dplyr)
library(tidyr)
df %>%
mutate(cluster = fit$cluster) %>%
pivot_longer(cols = -cluster) %>%
group_by(cluster, name) %>%
summarise(value = mean(value), .groups = 'drop') %>%
arrange(name, desc(value)) %>%
group_by(name) %>%
slice_head(n = 2)
数据
df <- structure(list(V1 = c(1L, 0L, 3L), V2 = c(1L, 1L, 0L), V3 = c(2L,
0L, 3L)), class = "data.frame", row.names = c("1", "2", "3"))
fit <- structure(list(cluster = c(2, 2, 1)), class = "data.frame",
row.names = c(NA,
-3L))
我有一个像
这样的数据框 V1 V2 V3
1 1 1 2
2 0 1 0
3 3 0 3
....
并且我有一个与数据框中的行数长度相同的向量(如果重要的话,它是来自 kmeans 的 cluster
)
[1] 2 2 1...
从那些我可以得到每个集群的colMeans
,比如
cm1 <- colMeans(df[fit$cluster==1,])
cm2 <- colMeans(df[fit$cluster==2,])
(我不认为我应该明确地做那部分,但这就是我思考问题的方式。)
我想要的是为数据框的每一列获取 colMeans 最大值的向量的值。我也想做(单独做)第二高,第三等。所以在这个例子中我希望输出是一个向量,数据框的每一列都有一个元素:
1 2 1...
因为对于数据框的第一列,第一个聚类的列均值是 3,而第二个聚类的列均值是 0.5。
如果cluster
向量的长度与'df'的行数相同,split
数据由'cluster'列变成list
,
lst1 <- lapply(split(df, fit$cluster), function(x) stack(colMeans(x)))
dat <- do.call(rbind, Map(cbind, cluster = names(lst1), lst1))
aggregate(values ~ ind, dat, FUN = which.max)
如果我们需要根据列均值对多个元素进行子集化,在数据中创建 'cluster' 列,重塑为 'long' 格式(或使用 summarise/across
),按 'cluster'、'name'、获取 'value' 的 mean
、arrange
列 'name' 和 desc
中的 'value'结束顺序,然后 return n
行 slice_head
library(dplyr)
library(tidyr)
df %>%
mutate(cluster = fit$cluster) %>%
pivot_longer(cols = -cluster) %>%
group_by(cluster, name) %>%
summarise(value = mean(value), .groups = 'drop') %>%
arrange(name, desc(value)) %>%
group_by(name) %>%
slice_head(n = 2)
数据
df <- structure(list(V1 = c(1L, 0L, 3L), V2 = c(1L, 1L, 0L), V3 = c(2L,
0L, 3L)), class = "data.frame", row.names = c("1", "2", "3"))
fit <- structure(list(cluster = c(2, 2, 1)), class = "data.frame",
row.names = c(NA,
-3L))