题
我想根据名称的子集选择行,例如
如果我有以下数据:
data <- structure(c(91, 92, 108, 104, 87, 91, 91, 97, 81, 98),
.Names = c("fee-", "fi", "fo-", "fum-", "foo-", "foo1234-", "123foo-",
"fum-", "fum-", "fum-"))
如何选择匹配“ foo”的行?
使用grep()不起作用:
grep('foo', data)
返回:
integer(0)
我究竟做错了什么?或者,还有更好的方法?
谢谢!
解决方案
您需要抓住数据的名称属性,而不是值属性。
对于您的示例,请使用
> grep("foo",names(data))
[1] 5 6 7
> data[grep("foo",names(data))]
foo- foo1234- 123foo-
87 91 91
另一种干净的方法是使用数据帧。
> data <- data.frame(values=c(91, 92, 108, 104, 87, 91, 91, 97, 81, 98),
names = c("fee-", "fi", "fo-", "fum-", "foo-", "foo1234-", "123foo-",
"fum-", "fum-", "fum-"))
> data$values[grep("foo",data$names)]
[1] 87 91 91
其他提示
将子集与正则表达式结合使用:
subset(your_data, regexpr("foo", your_data$your_column_to_match) > 0))
如果您只是关心一个列的数据集,我想您不需要指定列名...
菲利普
> grep("foo",names(data), value=T)
[1] "foo-" "foo1234-" "123foo-"
如果值为真,它将返回内容而不是索引
不隶属于 StackOverflow