如何删除数据框中列名的特定部分?

How to remove a certain portion of the column name in a dataframe?

我有以下格式的列名称:

col= c('UserLanguage','Q48','Q21...20','Q22...21',"Q22_4_TEXT...202")

我想获取不包含...

之后所有内容的列名
[1] "UserLanguage"    "Q48"             "Q21"        "Q22"        "Q22_4_TEXT"

我不知道如何编码。我找到了这个 post 但我不确定如何在我的案例中指定模式。

您可以使用 gsub.

gsub("\...*","",col)

#[1] "UserLanguage" "Q48"     "Q21"        "Q22"     "Q22_4_TEXT"  

或者您可以使用 stringr

library(stringr)

str_remove(col, "\...*")

由于 . 匹配任何字符,我们需要“转义”(\)以在正则表达式中准确指定我们要匹配的内容(而不是使用 [ 的特殊行为=14=]).因此,要匹配句点,我们需要 \.。但是,反斜杠 (\) 用于转义正则表达式中的特殊行为(例如,字符串中的转义符号)。因此,要创建正则表达式,我们需要一个额外的反斜杠,\. 在这种情况下,我们想要匹配额外的句点,因此我们可以在此处添加这些句点,因此 \...。然后,* 指定前面的表达式(三个句点的所有内容)可能出现 0 次或多次。

您可以 sub 并捕获每列中的第一个单词:

col <- c("UserLanguage", "Q48", "Q21...20", "Q22...21", "Q22_4_TEXT...202")
sub("^(\w+).*$", "\1", col)

[1] "UserLanguage" "Q48"          "Q21"          "Q22"          "Q22_4_TEXT"

此处使用的正则表达式匹配:

^      from the start of the input
(\w+)  match AND capture the first word
.*     then consume the rest
$      end of the input

然后,我们使用 sub 替换为 以仅保留第一个单词。