我无法设定我的资料。我希望将数据子集放在第x列,其中前3个字符以G45开始。
我的数据框:
x <- c("G448", "G459", "G479", "G406")
y <- c(1:4)
My.Data <- data.frame (x,y)
我试过了:
subset (My.Data, x=="G45*")
但是我不确定如何使用通配符。我也尝试过grep()来找到索引:
grep ("G45*", My.Data$x)
但它返回所有4行,而不仅仅是返回G45开头的行,可能还因为我不确定如何使用通配符。
最佳答案
使用[
提取非常简单:grep
将为您提供与搜索模式匹配的位置(除非您使用value = TRUE
)。
grep("^G45", My.Data$x)
# [1] 2
由于您在单列的值内搜索,因此实际上对应于行索引。因此,将其与
[
一起使用(在这里您将使用My.Data[rows, cols]
来获取特定的行和列)。My.Data[grep("^G45", My.Data$x), ]
# x y
# 2 G459 2
subset
的帮助页面显示了与grep
相比,如果您更喜欢使用此功能,则如何将grepl
和subset
与[
结合使用。这是一个例子。subset(My.Data, grepl("^G45", My.Data$x))
# x y
# 2 G459 2
从R 3.3开始,现在还有
startsWith
函数,您可以再次将其与subset
(或上述任何其他方法)一起使用。根据该功能的帮助页面,它比使用substring
或grepl
快得多。subset(My.Data, startsWith(as.character(x), "G45"))
# x y
# 2 G459 2
关于r - 使用grep帮助在R中子集数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21311386/