使用grep按名称(数据帧)对数据帧的列进行子集化

时间:2016-03-04 22:23:15

标签: r subset

我正在尝试使用grep将数据框的列子集为一行。当grep返回多个列时,新数据框具有grep中相应的列名。当只返回一列时,列名为NULL ...我正在使用此方法,因为我正在循环许多可能包含不同HVAC传感器数据组合的站点。

我正在尝试为每个单元'HVAC1','HVAC2','HVAC3'创建子集,并为所有单元共用的列创建子集。在这种情况下,只有一列对所有单元都是通用的:'IAT'或室内环境温度。此外,没有第三个HVAC单元,因此HVAC 3上的grep正确地将names(sensordata.h3)作为character(0)返回。

这是我的代码。

sensordata <- data.frame(sitetime = c("2015-10-22 14:15:17"), HVAC1RT = c(70.7), HVAC1ST = c(74.75), HVAC2RT = c(66.875), HVAC2ST = c(46.4), IAT = c(72.5))
sensordata
names(sensordata)

sensordata.h1 <- sensordata[,c(grep("HVAC1",names(sensordata)))]
sensordata.h1
names(sensordata.h1)

sensordata.h2 <- sensordata[,c(grep("HVAC2",names(sensordata)))]
sensordata.h2
names(sensordata.h2)

sensordata.h3 <- sensordata[,c(grep("HVAC3",names(sensordata)))]
sensordata.h3
names(sensordata.h3)

sensordata.common <- sensordata[,c(grep("IAT|OAT|IAH",names(sensordata)))]
sensordata.common
names(sensordata.common)

1 个答案:

答案 0 :(得分:0)

试试这个:

sensordata.common <- sensordata[,c(grep("IAT|OAT|IAH",names(sensordata))), drop=F]
sensordata.common
   IAT
1 72.5
names(sensordata.common)
[1] "IAT"

选项drop=F阻止[将输出减少为向量。请参阅?[(您需要在[周围使用反引号,无法在此处正确格式化...

或者,您可以使用dplyr::select,例如select(sensordata.common, contains("your_names_here"))dplyr的默认值是永远不会更改输出类。