R:使用“Gsub”丢失了我的数据帧格式

时间:2014-08-23 10:25:05

标签: 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     487      24
3 FBAds3     258       4
4 Email1       8       7

1)我读过“GSUB”会做这项工作所以我用过这个:

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

但是我得到了这个矢量对象(如你所见,我丢失了我的data.frame格式):

[1] "FBAds"              "FacebookAds-2"      "fcebookAds-3"      "Email1" ...

2)然后我尝试使用:as.data.frame:

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

但是得到这个(没有数据帧格式):

1                                                FBAds
2                                        fFacebookAds-2
3                                        fcebookAds-3
4                                               Email1 

我怎样才能得到我需要的东西?我知道更换方法不太好。我最需要的是不要放弃数据帧格式,但欢迎任何有关REGEX部分的帮助!

3 个答案:

答案 0 :(得分:1)

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

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

函数subgsub返回一个向量。因此,输出中不存在所有其他列的信息。使用transform,您可以修改现有数据框的列并返回一个新列。

在正则表达式中,(?i)启动 - 大小写敏感模式。此外,我使用sub,因为我假设每个字符串永远不会有多个匹配。

答案 1 :(得分:0)

您也可以直接替换第一列。这仅通过仅在第一列上操作来替换第一列中的所需部件。这将保持所需的数据框架结构。

> 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

答案 2 :(得分:0)

使用以下代码时:

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

R表示您希望数据框只包含DataGoogle1 $Campaña列,因此您可以获得该输出。

反过来,试试这个:

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

这样你就说要转换COLUMN而不是DATA FRAME。在任何代码中,表达式的LHS与RHS代码一样重要。

希望这会有所帮助。