在R编程的一列中提取含有“string”数据的行
Excel文件包含数字,字母和字母数字的许多列。
Column1 Column2 column2 1 1 abcd fm1 2 2 bcde fm2 3 3 cdef fm3 4 4 aced fm4 5 5 cadf fm5
我已经在R中导入了文件
data1 <- read.csv("Test1.csv")
现在要在R编程的第2列中提取包含“cd”的数据的行。
df <- structure(list(Column1 = 1:5, Column2 = c("abcd", "bcde", "cdef", "aced", "cadf"), column2 = c("fm1", "fm2", "fm3", "fm4", "fm5" )), .Names = c("Column1", "Column2", "column2"), class = "data.frame", row.names = c(NA, -5L))
你可以使用grep
df[grep('cd', df$Column2),]
数据
df <- structure(list(Column1 = 1:5, Column2 = c("abcd", "bcde", "cdef", "aced", "cadf"), column2 = c("fm1", "fm2", "fm3", "fm4", "fm5" )), .Names = c("Column1", "Column2", "column2"), class = "data.frame", row.names = c(NA, -5L))
我所维护的包中的qdap中的Search
函数使得这个任务非常简单:
library(qdap) Search(df, "cd", 2, 0) ## Column1 Column2 column2 ## 1 1 abcd fm1 ## 2 2 bcde fm2 ## 3 3 cdef fm3
第一个参数是data.frame,第二个术语,可选的第三个参数是列名或数字,第四个是string距离,因为函数默认为模糊匹配。 使用0
使其完全匹配。
在看到上面的@akrun提供的答案之前,我把它们放在一起:
#Data dF <- structure(list(Column1 = 1:5, Column2 = c("abcd", "bcde", "cdef", "aced", "cadf"), column2 = c("fm1", "fm2", "fm3", "fm4", "fm5" )), .Names = c("Column1", "Column2", "column2"), class = "data.frame", row.names = c(NA, -5L)) #Find rows with the string "cd" in the second column of the dataFrame 'dF' rows <- grep("cd", dF$Column2, ignore.case = F) #Display those rows dF[rows,]
grep()
函数 – 和它的表兄弟 – 很简单,一旦你得到正则expression式的诅咒,它是非常强大的。