如何返回包含在r中单元格中的字符串中的关键字行
我原以为这将是一行简单的代码,但解决我的挑战的办法是我逃避。我敢打赌,我在R编程领域有限的经验可能是原因 数据集如何返回包含在r中单元格中的字符串中的关键字行,r,subset,R,Subset,我原以为这将是一行简单的代码,但解决我的挑战的办法是我逃避。我敢打赌,我在R编程领域有限的经验可能是原因 数据集 df <- structure(list(Key_MXZ = c(1731025L, 1731022L, 1731010L, 1730996L, 1722128L, 1722125L, 1722124L, 1722123L, 1722121L, 1722116L, 1722111L, 1722109L), Key_Event =
df <- structure(list(Key_MXZ = c(1731025L, 1731022L, 1731010L, 1730996L,
1722128L, 1722125L, 1722124L, 1722123L, 1722121L, 1722116L, 1722111L,
1722109L), Key_Event = c(1642965L, 1642962L, 1647418L, 1642936L,
1634904L, 1537090L, 1537090L, 1616520L, 1634897L, 1634892L, 1634887L,
1634885L), Number_Call = structure(c(11L, 9L, 10L, 12L, 1L, 3L,
2L, 4L, 5L, 6L, 8L, 7L), .Label = c("3004209178-2010-04468",
"3004209178-2010-04469", "3004209178-2010-04470", "3004209178-2010-04471",
"3004209178-2010-04472", "3004209178-2010-04475", "3004209178-2010-04477",
"3004209178-2010-04478", "3004209178-2010-04842", "3004209178-2010-04850",
"I wish to return this row with the header", "Maybe this row will work too"
), class = "factor")), .Names = c("Key_MXZ", "Key_Event", "Number_Call"
), class = "data.frame", row.names = c("1", "2", "3", "4", "5",
"6", "7", "8", "9", "10", "11", "12"))
我尝试了下面的代码变体和其他一些看不见的代码,以取得突破,但收效甚微
txt <- c("this row")
table1 <- df[grep(txt,df),]
table2 <- df[pmatch(txt,df),]
df[,3]<-is.logical(df[,3])
table3 <- subset(df,grep(txt,df[,3]))
txt与
df[grep("this row", df$Number_Call, fixed=TRUE),]
# Key_MXZ Key_Event Number_Call
#1 1731025 1642965 I wish to return this row with the header
#4 1730996 1642936 Maybe this row will work too
只需要引用您希望grep尝试匹配的实际列
fixed=TRUE查找精确匹配,grep返回列表中匹配元素的索引。如果您的匹配有点细微差别,您可以将“this row”替换为与DMTs答案非常类似的正则表达式。下面使用data.table方法,该方法在有数百万行的情况下非常快速:
setDT(df); setkey(df, Number_Call)
df[grep("this row", Number_Call, ignore.case = TRUE)]
Key_MXZ Key_Event Number_Call
1: 1731025 1642965 I wish to return this row with the header
2: 1730996 1642936 Maybe this row will work too
下面是一种使用qdap
的Search
功能的方法。它是agrep的包装器,因此可以进行模糊匹配,模糊度可以设置:
library(qdap)
Search(df, "this row", 3)
## Key_MXZ Key_Event Number_Call
## 1 1731025 1642965 I wish to return this row with the header
## 4 1730996 1642936 Maybe this row will work too
谢谢你,泰勒。我想知道你运行的是什么版本的R和OS。我在R3.1.1/Win8上用qdap尝试了这种方法,得到了一条错误消息“loadNamespace中的错误”bc dplyr需要>=0.3版本。我尝试过更新dplyr,但不知什么原因,它仍然保持在.2。嗯,真糟糕。我想。您可以尝试在R-vanilla会话中运行install.packages(“dplyr”,type=“source”)
(即,未加载dplyr)。我正在运行Win7R开发版本。但是它看起来像是dplyr.3.0.1
在CRAN上,现在Windows的二进制文件将在几天内生成。我希望他们所经历的一些纠结会得到解决。如果您能够使用这种方法(即安装qdap),请您更新我。我希望看到qdap工作。因此,当我扩展代码时,我可能会再试一次。install.packages(“dplyr”,type=“source”)
做了什么?它向安装添加了两个依赖项,并初始化了这些依赖项,以检查操作系统的体系结构并验证安装。一些警告会导致延迟加载(?)并安装dplyr。看起来它随后将其回滚到dplyr的早期版本。不管怎样,库(dplyr)可以工作——没有问题。但是,名称空间与库(qdap)冲突仍然存在。R CONSOLE 3.1.1的完整技术答案:[
library(qdap)
Search(df, "this row", 3)
## Key_MXZ Key_Event Number_Call
## 1 1731025 1642965 I wish to return this row with the header
## 4 1730996 1642936 Maybe this row will work too