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

Using grep to subset columns of a dataframe by names(dataframe)

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

我正在尝试为每个单元 'HVAC1'、'HVAC2'、'HVAC3' 创建子集,并为所有单元共有的列创建一个子集。在这种情况下,只有一列对所有单元都是通用的:'IAT' 或室内环境温度。此外,没有第三个 HVAC 单元,因此 HVAC 3 上的 grep 正确 returns names(sensordata.h3) as 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)

试试这个:

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 的默认值是从不更改输出 class。