在R中,如何使用gsub()操作字符串并高效地执行多元数据清理?

在R中,如何使用gsub()操作字符串并高效地执行多元数据清理?,r,regex,gsub,data-science,data-cleaning,R,Regex,Gsub,Data Science,Data Cleaning,我是R编程的新手,我一直在处理字符串,如果有人能对代码进行注释,我将不胜感激。数据框中有福布斯100大品牌。我想清理一个特定的专栏“公司广告”作为(检查附加的屏幕截图) 将所有百万值转换为十亿,因为1 M=0.001 B 删除不必要的符号B、M,并且仅具有数值 结果列将看起来像.. 前:1.2 B、2.3 B、3 B、808米 之后:1.2、2.3、3、0.808gsubfn非常适合此任务: x = c("1.2 B", "2.5 B", "808 M") y = ifelse(grep

我是R编程的新手,我一直在处理字符串,如果有人能对代码进行注释,我将不胜感激。数据框中有福布斯100大品牌。我想清理一个特定的专栏“公司广告”作为(检查附加的屏幕截图)

  • 将所有百万值转换为十亿,因为1 M=0.001 B
  • 删除不必要的符号B、M,并且仅具有数值
结果列将看起来像.. 前:1.2 B、2.3 B、3 B、808米


之后:1.2、2.3、3、0.808

gsubfn
非常适合此任务:

x = c("1.2 B", "2.5 B", "808 M")

y = ifelse(grepl("B",x) == T, as.numeric(gsub("\\s{1,10}B$","",x)),as.numeric(gsub("\\s{1,10}M$","",x))/1000)
View(y)


    x
1   1.200
2   2.500
3   0.808
library(gsubfn)
as.vector(sapply(gsubfn("[A-Z]", list(B="* 1", M= "* 1e-3"), x), 
                                      function(x) eval(parse(text=x))))
#[1] 1.200 2.500 0.808
数据
x请粘贴
dput(d1)
的结果,而不是一个不可用的图像。
==T
充其量是多余的。谢谢你的回答,你能解释一下这个列表(B=“*1”,M=“*1e-3”)吗?我不明白。@Ashish25Sahu在这里,我们正在创建一个键/值来用
*1
字符串替换“B”,“M”与
*1e-3
一起使用,因此当我们使用
eval(parse
进行计算时,另一个值与
*1
*1e-3
相乘,这相当于Perl构造
s/../ge
x <- c("1.2 B", "2.5 B", "808 M")