gpt4 book ai didi

r - 如何通过输入键在 Shiny 中加入两个 react 数据帧?

转载 作者:行者123 更新时间:2023-12-03 21:49:18 25 4
gpt4 key购买 nike

我有两个响应式(Reactive)数据帧(出于解释目的,我正在创建模拟数据帧),我需要使用输入字段作为键将它们连接到 Shiny 的数据帧中。

library(shiny)
library(tidyverse)
df <- data.frame(key1=c(1:4),key2 = c(5:8),
left= c("l1", "l2", "l3", "l4"),
right = c("r1", "r2", "r3", "r4"))
left_df <- df[,1:3]
right_df <- df[,c(1:2,3)]

ui <- fluidPage(

# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
selectInput("key_right", "Right Key", c("key1", "key2")),
selectInput("key_left", "Right Key", c("key1", "key2"))
),

mainPanel(
tableOutput("final_data")
)
)
)


server <- function(input, output) {

left_df2 <- reactive({
left_df
})

rightt_df2 <- reactive({
right_df
})

final_df <- reactive({
left_df2() %>%
left_join(right_df2(), by = c(input$key_right = input$key_left))
})

output$final_data <- reactive({
final_df()
})

}
我收到此错误:
Error in parse(file, keep.source = FALSE, srcfile = src, encoding = enc) : 
/app.R:37:60: unexpected '='
36: left_df2() %>%
37: left_join(right_df2(), by = c(input$key_right =
Error in sourceUTF8(fullpath, envir = new.env(parent = sharedEnv)) :
我需要通过 key1 或 key2 执行连接,这应该是用户输入,因为用户有可能上传文件并且可能有一个或另一个键。
提前致谢!

最佳答案

TL; 博士

     final_df <- reactive({
left_df2() %>%
left_join(right_df2(), by = setNames(input$key_right, input$key_left))
})
(我认为您的代码中的键被颠倒了……第一帧的键名应该在 = 的左侧,而不是您的示例中的右侧。这就是为什么在下面的示例中我在 right_df 中使用不同的键名进行演示。)
解释 input$key_right = ...实际上是重新分配操作(覆盖 key_right 列表的 input 属性的值),而不是您想要的。
为了清楚地演示,我将 (1) 修复 right_df以便它包含 right列,以及 (2) 更改其 key名称要不同。
right_df <- df[,c(1:2,4)]
names(right_df)[1:2] <- c("key3", "key4")
right_df
# key3 key4 right
# 1 1 5 r1
# 2 2 6 r2
# 3 3 7 r3
# 4 4 8 r4
从这里开始,静态连接可能是:
left_join(left_df, right_df, by = c("key1" = "key3"))
# key1 key2 left key4 right
# 1 1 5 l1 5 r1
# 2 2 6 l2 6 r2
# 3 3 7 l3 7 r3
# 4 4 8 l4 8 r4
分配名称的等效方法 "key1"到一个字符串 "key3"是使用 setNames :
left_join(left_df, right_df, by = setNames("key3", "key1"))
这种方法的一个优点是它允许您通过变量以编程方式定义名称。

关于r - 如何通过输入键在 Shiny 中加入两个 react 数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63306232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com