我正在使用Shiny应用程序。用户界面的一部分涉及使用下拉菜单,复选框等选择要绘制的多列数据中的哪一列。我正在使用grepl()和用户输入来将大数据帧缩小到最终被绘制的单个列。指定此上下文,以便您知道我无法进行一次性解决方法;我需要一个可以应用于一千或更多列数据的强大解决方案(在你责备我拥有大量数据之前,我正在进行映射,所以我在一个shp文件的范围内工作)通过用户界面。
重要的是,我保留了为调试代码,生成图形标题等所绘制的列的名称,但是在修剪的最后阶段,当我只剩下一列时,列名称消失。
如果我这样做:
test <- data.frame(c1 = c(1,2,3), c2 = c(4,5,6))
trimmed <- test[, grepl("c1", names(test))]
这是回归。
修整 [1] 1 2 3
好的,好的。我会强制使用数据帧。试试这个:
test <- data.frame(c1 = c(1,2,3), c2 = c(4,5,6))
trimmed <- as.data.frame(test[, grepl("c1", names(test))])
这是回报:
修整 test [,grepl(&#34; c1&#34 ;, names(test))] 1 1 2 2 3 3
那个专栏似乎不再被命名为c1了。
由于我将数据框缩小到较小的子集的方式,我在其他地方没有该列名称。换句话说,我不能在最终数据框中重命名该列,因为我事先并不知道该名称是什么。
我如何写这个以便保留原作&#34; c1&#34;列名?
答案 0 :(得分:3)
使用drop = F
保留结构(不丢弃单值维度)
test[, grepl("c1", names(test)), drop = FALSE]
E.g:
> mtcars[1:3, "mpg"]
[1] 21.0 21.0 22.8
> mtcars[1:3, "mpg", drop = F]
mpg
Mazda RX4 21.0
Mazda RX4 Wag 21.0
Datsun 710 22.8
有关详细信息,请参阅?"["
。