所以我有一个看起来像这样但有 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)
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)
注意放在
\\前面*作为转义字符