删除最后一个“.”之后的字符串的最后一部分。在 R

Remove the last part of a string after the last "." in R

假设我们有一个变量名列表,如下所示:

ls<-c("apple.mean", "orange.mean", "orange.sd", "apple.pie.mean", "orange.juice.n", "orange.juice.p%")

我们如何删除每个元素中的最后一部分(“.”之后),以便我们可以得到:

"apple" "orange" "orange" "apple.pie" "orange.juice" "orange.juice"

注意可能有“.”在名字里面,但我不希望这些词被分开。

我试图使用 gsub("\..*$", "",ls) 但它省略了第一个点之后的所有内容。我不确定为什么 $ 符号在这里不起作用。有什么想法吗?

> gsub("\..*$", "",ls)
[1] "apple"  "orange" "orange" "apple"  "orange" "orange"

你可以试试

sub('[.][^.]+$', '', ls)
#[1] "apple"        "orange"       "orange"       "apple.pie"    "orange.juice"
#[6] "orange.juice"

鉴于这等同于删除您可以使用的文件扩展名

library(tools)
file_path_sans_ext(ls)