【问题标题】:R: Set up and choose values based on labelsR:根据标签设置和选择值
【发布时间】:2020-08-01 12:12:18
【问题描述】:

我想在数据上运行一些功能,选择的数据取决于用户选择(闪亮)。 例如,考虑一下:

dumb_input = 以下任何值(“english”、“spanish”、“french”、“german”)

所以,我希望根据语言选择访问不同的数据。设置它的最佳方法是什么?我有下面使用 DataFrame 的代码,但我认为它可能效率低下:

#objective: get the name 'arthur' when 'english' is selected
langs = c("english", "spanish", "french", "german")
names = c("arthur", "pablo", "antoine", "hans")
data_names = data.frame(langs, names, stringsasfactors = FALSE)

data_names[data_names[1]==dumb_input,] <--- this obviously is still a dataframe giving us ["english", "arthur"] so we go further
as.character(data_names[data_names[1]==dumb_input,][2]) #returns "arthur"

那么,有没有更好的方法来做到这一点?我觉得应该有。这也可以用另一个 R 结构来完成,例如列表吗?

【问题讨论】:

  • 另外,我想知道我的代码最后一行中的“as.character()”函数是否必要。
  • 我觉得你需要data_names[[1]]
  • @akrun 你能说得更具体点吗? data_names[[1]] 只是给了我语言向量
  • 我猜你一次只提供一个元素,你想filter基于那个的行?那么== 就可以了。如果您想拆分数据,则只需执行split(data_names, data_names$langs)

标签: r dataframe shiny


【解决方案1】:

如果你只想要基于dumb_inputnames,你可以使用match

dumb_input <- 'french'
data_names$names[match(dumb_input, data_names$langs)]
#[1] "antoine"

或者==

data_names$names[data_names$langs == dumb_input]

记住 R 是区分大小写的,在构建你可能打算使用的数据框时:

data_names = data.frame(langs, names, stringsAsFactors = FALSE)

【讨论】:

    【解决方案2】:

    我发现 hash 库在这方面工作正常:

    #objective: get the name 'arthur' when 'english' is selected
    langs = c("english", "spanish", "french", "german")
    names = c("arthur", "pablo", "antoine", "hans")
    data_names_hash = hash (keys = langs, values = names)
    
    data_names_hash[["german"]] 
    #[1] hans
    

    【讨论】:

      猜你喜欢
      • 2017-02-21
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      • 2020-03-13
      • 2017-06-03
      • 1970-01-01
      相关资源
      最近更新 更多