【发布时间】:2016-11-08 12:28:26
【问题描述】:
我有一个 15000 obs 的数据框。 45 个变量,具有与下面给出的示例输入数据帧类似的结构/模式/类。
我想要做的是选择“日期”列+包含“_MIN”的列作为标题的一部分,并将它们放入一个新的df中。 & 选择“日期”列 + 包含“_MIN”的列作为标题的一部分,并将它们放入新的 df 中。
所以我基本上是在寻找一种基于列标题名称的一部分来选择或子集整个列的方法。示例:多个列包含“_”下划线我想删除或选择这些列。
INPUT dataframe:
Example <- data.frame(Date=seq(as.Date("1979/1/1"),as.Date("1979/1/5"), by="day"), ca_MIN=1:5, ca_MAX=2:6, cb_MIN=3:7, cb_MAX=4:8)
>Example
Date ca_MIN ca_MAX cb_MIN cb_MAX
1 1979-01-01 1 2 3 4
2 1979-01-02 2 3 4 5
3 1979-01-03 3 4 5 6
4 1979-01-04 4 5 6 7
5 1979-01-05 5 6 7 8
OUTPUT dataframes, selected based on the column names "_MAX", "_MIN":
Example_MIN <- data.frame(Date=seq(as.Date("1979/1/1"),as.Date("1979/1/5"), by="day"), ca_MIN=1:5, cb_MIN=3:7)
Example_MAX <- data.frame(Date=seq(as.Date("1979/1/1"),as.Date("1979/1/5"), by="day"), ca_MAX=2:6, cb_MAX=4:8)
>Example_MIN
Date ca_MIN cb_MIN
1 1979-01-01 1 3
2 1979-01-02 2 4
3 1979-01-03 3 5
4 1979-01-04 4 6
5 1979-01-05 5 7
目前它适用于:
Example_MIN <-Example
Example_MAX <-Example
subset(ExampleMIN,select=-c(2,4))
subset(ExampleMAX,select=-c(3,5))
然而,这给我一个大型数据集的错误(尽管结果对我有用):
Error in `[.data.table`(x, r, vars, with = FALSE) : j out of bounds
有没有更简单的方法来做到这一点?
我希望它也可以处理具有大量列的数据集以及列“_MIN”和“_MAX”未排序为奇数和偶数列号?
我看到了相关的帖子,但我还没有设法创建有效的代码......
【问题讨论】:
-
Example[grepl("_MIN", names(Example))]和Example[grepl("_MAX", names(Example))] -
从错误消息来看,它看起来像
data.table。在那种情况下Example[, grepl("_MIN", names(Example)), with = F] -
@Ronak Shah。是的,显然在我的脚本中的某个地方,我的 data.frame 变成了 data.table。这就是为什么我之前的尝试没有奏效。感谢您指出了这一点。下次我执行操作时会记住这一点:)