不确定确切如何为我的问题加上标题,因此,如果我可以使其更清楚,请提供反馈。
我有一个数据框,其中的几列看起来与此类似:
Node Component Value
1 A os.name RedHat
2 A os.version 16.04
3 A docker.version 1.13.1
4 A kernel.version 3.10.0
5 B os.name RedHat
6 B os.version 16.04
7 B docker.version 1.12.1
8 B kernel.version 3.11.0
9 C os.name Ubuntu
10 C os.version 18.04
11 C docker.version 1.12.1
12 C kernel.version 3.12.0
13 D os.name RedHat
14 D os.version 17.04
15 D docker.version 1.13.1
16 D kernel.version 3.13.0
可以复制以下内容:
structure(list(Node = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L), .Label = c("A", "B", "C",
"D"), class = "factor"), Component = structure(c(3L, 4L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L), .Label = c("docker.version",
"kernel.version", "os.name", "os.version"), class = "factor"),
Value = structure(c(10L, 3L, 2L, 6L, 10L, 3L, 1L, 7L, 11L,
5L, 1L, 8L, 10L, 4L, 2L, 9L), .Label = c("1.12.1", "1.13.1",
"16.04", "17.04", "18.04", "3.10.0", "3.11.0", "3.12.0",
"3.13.0", "RedHat", "Ubuntu"), class = "factor")), class = "data.frame", row.names = c(NA,
-16L))
此数据正在闪亮的应用程序中呈现,该应用程序用于查找未使用组件的正确版本(以值表示)的节点。我创建了一个“基线”数据框,该数据框列出了组件应使用的版本,并使用rpivotTable包显示了与该“基线”不匹配的节点。在某些情况下,用户可能需要更新基线。我正在尝试确定一种向用户展示每个组件的所有可能值的方法,以便他们可以反应性地修改基线并且数据透视表将更新。
我考虑过在ui中使用选择输入,甚至可能使用可手动操作的输入,但是我无法弄清楚如何在不将其硬编码为“选择”或“级别”的情况下呈现这些选择,这就是我在这里的原因。注意:我计划使用循环来动态生成selectInput或使用handontable来代替100多个组件。
是否可以访问每个变量组的级别?例如,用户将修改os.verion的基线,然后选择16.04、17.04或18.04作为目标基线。有办法利用group_by吗?
编辑:
希望这将对我的要求提供更好的说明。与levels(df$Component)
以相同的方式提供“组件”类别的因子级别,是否有一种方法可以深入到每个组件以获取其级别?我知道某些功能能够以某种方式完成此任务,例如
df %>% group_by(Component) %>%
add_count(Value)
根据按组件分组的值提供计数。
答案 0 :(得分:0)
如果我正确理解了您的问题,解决方案是将数据的格式从长格式更改为宽格式。当前,节点的各个方面都在其自己的行上,这使得很难找出其可以具有的值。如果您将数据重整为宽格式,将很容易访问。
尝试一下:
library(tidyverse)
newdf <- spread(df, Component, Value, convert = TRUE)
# Node docker.version kernel.version os.name os.version
# 1 A 1.13.1 3.10.0 RedHat 16.04
# 2 B 1.12.1 3.11.0 RedHat 16.04
# 3 C 1.12.1 3.12.0 Ubuntu 18.04
# 4 D 1.13.1 3.13.0 RedHat 17.04
unique(newdf$docker.version)
# [1] "1.13.1" "1.12.1"
设置convert = TRUE
自动为新列选择合适的数据类型。您需要检查是否要发生这种情况。在这种情况下,os.version列是数字类型的,您可能不需要。它还将字符串列转换为字符而不是因子数据类型。这意味着您可以使用unique
访问唯一值,也可以在将它们转换回因子后使用levels
。