数据框中列名丢失

时间:2016-12-28 22:27:02

标签: r subset names grepl

我正在使用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;列名?

1 个答案:

答案 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

有关详细信息,请参阅?"["