我在R中有一个包含一百多行字符的数据集。
我正在尝试删除所有以"."句点字符开头和结尾的行。 我首先将这些行设置为空白,然后通过将它们写入.csv文件来删除它们。 问题出在第一部分,如何首先将它们设置为空白?
下面是我尝试过的 gsub 命令,但不对任何行执行任何操作。
#remove all periods followed by a space
data$text<- gsub('^([.][.])$', '', data$text)
data$text <- gsub('[.]*$',"",data$text) # with over a hundred rows
Value text
1 male occupied
2 male occupied
3 female occupied
4 . . . .
5 male occupied
6 . . .
7 female occupied
8 . .
我的预期输出:
Value text
1 male occupied
2 male occupied
3 female occupied
5 male occupied
7 female occupied
如何在 R 中执行此操作? gsub 是要走的路吗?
gsub
是从字符串中删除/替换子字符串的全局替换。 据?gsub
两个 *sub 函数的区别仅在于 sub 仅替换模式的第一次出现,而 gsub 替换所有出现。
在这里,目的是在向量中找到模式的位置,并删除向量或列中的这些元素(从 data.frame 中删除行)。grep
文件说
grepl、regexpr、gregexpr 和 regexec 在字符向量的每个元素中搜索与参数模式的匹配项:它们在结果的格式和细节量上有所不同。
因此,我们得到数字索引(grep
)或逻辑向量(grepl
)输出,并子集ddata
df1[!grepl("^\.|\.$", df1$text),]
在这里,我们匹配一个.
(.
是任何字符的元字符 - 所以要获得字面意思,要么转义(\
)或将其放在方括号([.]
)或使用fixed = TRUE
- 这里有|
,所以我们不能使用该选项)在字符串的开头(^
)或结尾($
)返回一个带有grepl
的逻辑向量, 否定 (!
),以便 TRUE -> FALSE 和 FALSE -> TRUE 并使用它来过滤行。