如何删除r中列值中的字符(星号)?

Jul*_*t R 4 variables r

所以我有一个看起来像这样但有 6k 行的数据框:

AWC, LocationID
333, *Yukon
485, *Lewis Rich
76, *Kodiak
666, Kodiak
54, *Rays
Run Code Online (Sandbox Code Playgroud)

如果可能,我想从 LocationID 值中删除星号并保留原始名称。所以 *育空 -> 育空。如果那不可能,您能帮我重命名列值吗?我是 r 的新手。

Gui*_*the 11

stringr包有一些非常方便的矢量化字符串操作函数。

在下面的代码我替换*''。请注意,在 R 中,正则表达式中的文字必须以双斜杠开头,\\而不是通常的单斜杠\

library(stringr) 
LocationID <- c('*Yukon','*Lewis Rich',  '*Kodiak', 'Kodiak', '*Rays')
AWC <- c(333, 485, 76, 666, 54)
df <- data.frame(LocationID, AWC)

df$location_clean <- stringr::str_replace(df$LocationID, '\\*', '')
Run Code Online (Sandbox Code Playgroud)

导致:

LocationID AWC location_clean
1      *Yukon 333          Yukon
2 *Lewis Rich 485     Lewis Rich
3     *Kodiak  76         Kodiak
4      Kodiak 666         Kodiak
5       *Rays  54           Rays
Run Code Online (Sandbox Code Playgroud)


odu*_*o12 5

mutate这可以使用包中的动词来实现tidyverse。我认为这更具可读性。因此,为了举例说明这一点,我创建了一个名为 的数据集DT,重点是LocationID模拟当前的问题。

library(tidyverse)
DT <- data.frame('AWC'= c(333, 485, 76, 666, 54), 
                 'LocationID'= c('*Yukon','*Lewis Rich', '*Kodiak', 'Kodiak', '*Rays'))

head(DT)
  AWC  LocationID
1 333      *Yukon
2 485 *Lewis Rich
3  76     *Kodiak
4 666      Kodiak
5  54       *Rays
Run Code Online (Sandbox Code Playgroud)

接下来,mutate允许更改列内容,gsub进行所需的替换(使用*"",保持数据清理流程可遵循。

DT <- DT %>% mutate(LocationID = gsub("\\*", "", LocationID))
head(DT)
  AWC LocationID
1 333      Yukon
2 485 Lewis Rich
3  76     Kodiak
4 666     Kodiak
5  54       Rays
Run Code Online (Sandbox Code Playgroud)

注意放在\\前面*作为转义字符