Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex R:使用;Gsub";丢失了我的数据帧格式_Regex_R_Gsub - Fatal编程技术网

Regex R:使用;Gsub";丢失了我的数据帧格式

Regex R:使用;Gsub";丢失了我的数据帧格式,regex,r,gsub,Regex,R,Gsub,我有这个数据框: Campaña Visitas Compras 1 faceBOOKAds-1 524 2 2 FacebookAds-2 487 24 3 fcebookAds-3 258 4 4 Email1 8 7 我想要这个: Campaña Visitas Compras 1 FBAds1 524 2 2 FBAds2

我有这个数据框:

  Campaña           Visitas  Compras
1 faceBOOKAds-1     524       2
2 FacebookAds-2      487      24
3 fcebookAds-3      258       4
4 Email1            8         7 
我想要这个:

  Campaña    Visitas  Compras
1 FBAds1     524       2
2 FBAds2     487      24
3 FBAds3     258       4
4 Email1       8       7
1) 我读到“GSUB”会做这项工作,所以我用了这个:

DataGoogle2 <- gsub("faceBOOKAds-1", "FBAds", DataGoogle1$Campaña)
2) 然后我尝试使用:as.data.frame:

DataGoogle2 <- as.data.frame(gsub("faceBOOKAds-1", "FBAds", DataGoogle1$Campaña))
我怎样才能得到我需要的?我知道更换的方法不太好。我最需要的是不要放松数据帧格式,但是欢迎对REGEX部分的任何帮助

您可以使用transform(和另一个正则表达式)


DataGoogle2您还可以直接替换第一列。这将仅通过对第一列进行操作来替换第一列中所需的零件。这将保持所需的数据帧结构

> dat[[1]] <- gsub("f(.*)[-]", "FBAds", dat[[1]], ignore.case = TRUE)
> dat
#   Campaña Visitas Compras
# 1  FBAds1     524       2
# 2  FBAds2     487      24
# 3  FBAds3     258       4
# 4  Email1       8       7
>dat[[1]]dat
#康帕尼亚观光酒店
#1 FBAds1 524 2
#2 FBAds2 487 24
#3 FBAds3 258 4
#4电邮18 7

…当您使用以下代码时,假定您的原始数据被称为
dat

DataGoogle2 <- gsub("faceBOOKAds-1", "FBAds", DataGoogle1$Campaña)

DataGoogle2谢谢史蒂夫。请你解释一下为什么sub而不是gsub。这是因为此数据框中的眼波可能只有一个(每行/条目)?2) 在正则表达式中:(?i)表示大写字母“F”是可选的?我将如何应用它来表示:无论任何字母是否为大写,只要匹配这个正则表达式即可。非常感谢。@OmarGonzales我补充了一些解释。谢谢,Sven。我想为R推荐一本关于正则表达式的好书。我正在阅读“Master Regular Expressions 3Edition”,其中谈到了基于Perl引擎的正则表达式。但欢迎任何建议*只是想弄清楚:正则表达式中的\\1\\2是什么?我认为它与“广告”部分相同,但不要理解其中的逻辑。@OmarGonzales,你可能想在“替换…”下找到进一步的解释。顺便说一句,beeing能够使用
(?i)
而不是
ignore.case=TRUE
对我来说是新事物。Gaston Sanchez对正则表达式和字符串处理做了很好的解释。这是一个大约100页的免费PDF,标题是“在R中处理和处理字符串”。他没有提到捕获组和环顾断言,但他在基础知识方面非常出色。顺便问一下,你是否也在R-Help上发布了这个问题(或与之非常类似的问题)?我的理解是,在两个网站上同时问相同或类似的问题时,交叉发帖、多发帖或任何术语都不是一个好的做法。谢谢@user3694373!现在更清楚的是,我所尝试的是错误的。谢谢你,伙计!
DataGoogle2 <- transform(DataGoogle1, Campaña = sub("(?i)fa?cebook(.*)-(.*)", 
                                                    "FB\\1\\2", Campaña))
#   Campaña Visitas Compras
# 1  FBAds1     524       2
# 2  FBAds2     487      24
# 3  FBAds3     258       4
# 4  Email1       8       7
> dat[[1]] <- gsub("f(.*)[-]", "FBAds", dat[[1]], ignore.case = TRUE)
> dat
#   Campaña Visitas Compras
# 1  FBAds1     524       2
# 2  FBAds2     487      24
# 3  FBAds3     258       4
# 4  Email1       8       7
DataGoogle2 <- gsub("faceBOOKAds-1", "FBAds", DataGoogle1$Campaña)
DataGoogle2$Campaña <- gsub("faceBOOKAds-1", "FBAds", DataGoogle1$Campaña)