【问题标题】:Using grep to subset columns of a dataframe by names(dataframe)使用 grep 按名称(数据框)对数据框的列进行子集化
【发布时间】:2016-06-18 20:16:15
【问题描述】:

我正在尝试使用 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)

【问题讨论】:

  • 您能否突出您的编码问题,即您面临的实际问题?
  • 确实,您可能错过了这个问题。
  • 当 grep 在创建名为 sensordata.common 的子集时仅返回一列时,对 names(sensordata.common) 的调用返回 NULL
  • 尝试drop=F 作为子集的一个选项。
  • 谢谢!成功了!

标签: r subset


【解决方案1】:

试试这个:

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 的默认设置是从不更改输出类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 2015-12-24
    相关资源
    最近更新 更多