在 r 中使用 grep 选择一列时指定列名

specifying column name when one column is selected using grep in r

我的 grep 函数有问题。具体来说,当我告诉 R 使用该函数获取以某个字母开头的所有列,并且只有一个这样的列时,生成的只是以代码作为列名的数据,如下所示:

> head(newdat1)
  i1 b2 b1 b17
1  1  1  2   0
2  1  1  2   0
3  1  1  2   0
4  1  1  2   0
5  2  1  1   0
6  3  1  1   1

datformeanfill<-as.data.frame(newdat1[,grep("^i", colnames(newdat1))])
> head(datformeanfill)
newdat1[, grep("^i", colnames(newdat1))]
1                                        1
2                                        1
3                                        1
4                                        1
5                                        2
6                                        3

与如果我有两个或多个以相同字母开头的列相反:

datnotformeanfill<-as.data.frame(newdat1[,grep("^b", colnames(newdat1))])
> head(datnotformeanfill)
    b2 b1 b17
  1  1  2   1
  2  1  2   1
  3  1  2   1
  4  1  2   1
  5  1  1   1
  6  1  1   2

我们看到列名被维护的地方,如果我有多个 "i",它也是一样的。请帮忙谢谢!

使用

datformeanfill <- newdat1[,grep("^i", colnames(newdat1)), drop=FALSE]

以确保您总能得到 data.frame。详情请参阅 ?'[.data.frame'