You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shiny R基于复选框选变量的响应式K-means分析与位置聚类可视化

完整实现代码

library(shiny)
library(DT)
library(ggplot2)

# 初始化数据集
df <- as.data.frame(cbind(
  lat = rnorm(150, mean = 30, sd = 5),
  lon = rnorm(150, mean = 10, sd = 5),
  iris[, 1:4]
))

# UI部分
ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      checkboxGroupInput("show_vars", "k-means可选特征变量",
                         names(df[, 3:6]), selected = names(df[, 3:6])),
      numericInput('clusters', '聚类数量', 3, min = 1, max = 9),
    ),
    mainPanel(
      DT::dataTableOutput('mytable1'),
      plotOutput("cluster_plot")
    )
  )
)

# 服务端部分
server <- function(input, output) {
  # 响应式数据集:动态计算聚类结果并绑定经纬度信息
  processed_df <- reactive({
    # 提取用户选中的特征变量用于聚类
    selected_data <- df[, input$show_vars, drop = FALSE]
    # 运行k-means聚类
    km_res <- kmeans(selected_data, centers = input$clusters)
    # 拼接原始经纬度、选中特征、聚类标签为完整数据集,聚类标签转为因子适配离散配色
    cbind(df[, c("lat", "lon")], selected_data, cluster = as.factor(km_res$cluster))
  })
  
  # 渲染带聚类结果的交互表格
  output$mytable1 <- DT::renderDataTable({
    DT::datatable(processed_df())
  })
  
  # 渲染经纬度空间聚类散点图
  output$cluster_plot <- renderPlot({
    ggplot(processed_df(), aes(x = lon, y = lat, color = cluster)) +
      geom_point(size = 2) +
      labs(x = "经度", y = "纬度", color = "聚类类别") +
      theme_bw()
  })
}

shinyApp(ui, server)

关键逻辑说明

  • 用reactive()构造响应式数据集,监听用户选择的特征、聚类数量两个输入的变化,自动触发聚类重计算
  • 聚类完成后直接拼接原始经纬度列、选中特征列、聚类标签,保证表格和绘图用的数据源完全一致
  • 聚类标签转为因子类型,适配ggplot离散分类配色规则

内容的提问来源于stack exchange,提问作者Jim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:36:05