所以我有一个数据帧,看起来像这样,但是有6k行:
AWC, LocationID
333, *Yukon
485, *Lewis Rich
76, *Kodiak
666, Kodiak
54, *Rays如果可能的话,我想删除LocationID值中的星号,只保留原来的名称。所以*育空->育空。如果这是不可能的,你能帮我重命名一个列值吗?我是个新手。
发布于 2017-05-24 02:16:53
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, '\\*', '')结果是:
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发布于 2020-07-10 17:54:35
这可以使用tidyverse包中的mutate谓词来实现。在我看来这更具可读性。因此,为了举例说明这一点,我创建了一个名为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在下面的代码中,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注意到将
\\放在*之前作为转义字符
发布于 2017-05-24 02:26:00
使用gsub和转义字符\因为*是一个特殊字符,基本上用不带“”的字符替换*(因此删除它)
> so
AWC LocationID
1 333 *Yukon
2 485 *Lewis Rich
3 76 *Kodiak
4 666 Kodiak
5 54 *Rays
> so$LocationID=gsub("\\*","",so$LocationID)
> so
AWC LocationID
1 333 Yukon
2 485 Lewis Rich
3 76 Kodiak
4 666 Kodiak
5 54 Rayshttps://stackoverflow.com/questions/44140995
复制相似问题