我有这个数据框:
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部分的帮助!
答案 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
函数sub
和gsub
返回一个向量。因此,输出中不存在所有其他列的信息。使用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代码一样重要。
希望这会有所帮助。