查找并替换R中的值

查找并替换R中的值,r,replace,find,rows,names,R,Replace,Find,Rows,Names,我希望在数据帧的列中找到一个特定的值,然后替换为我想要的任何值 例如,我有一个带有城市名称(第1列)和频率(第2列)的数据框。但是有些城市有不同的地区,因此R认为它们像不同的城市,因为它们没有相同的行名称 例如: -->我有: City Freq 1 Paris 01 69 2 Paris 03 60 3 Paris 15 12 4 Paris 20 2 5 Toulouse 60 6 Paris 15 7

我希望在数据帧的列中找到一个特定的值,然后替换为我想要的任何值

例如,我有一个带有城市名称(第1列)和频率(第2列)的数据框。但是有些城市有不同的地区,因此R认为它们像不同的城市,因为它们没有相同的行名称

例如:

-->我有:

      City     Freq
1    Paris 01   69
2    Paris 03   60
3    Paris 15   12
4    Paris 20   2
5    Toulouse   60
6    Paris      15
7    Lille      12
-->我想:

      City Freq
1    Paris   69
2 Toulouse   60
3    Lille   12
我试图使用gsub函数,但我不知道如何处理它。我也尝试了一些if语句,但失败了。在发布之前,我真的试图找到一些答案,但我找到的例子更简单,只涉及所有列的更改(等等)

谢谢你帮助我

以下是有关我的数据的一些信息:

dput(droplevels(head(data))) 

structure(list(City = structure(c(1L, 4L, 3L, 5L, 2L, 6L), .Label = c("PARIS", "PARIS 13", "PARIS 15", "PARIS 16", "PARIS 18", "PARIS 20"), class = "factor"), Freq = c(8859L, 3843L, 3583L, 2651L, 2586L, 2464L)), .Names = c("City", "Freq"), row.names = c(19380L, 19396L, 19395L, 19398L, 19393L, 19400L), class = "data.frame")

您可以使用
sub

df2 <- transform(df1, City=tolower(sub("\\s+.*$", '', City)))
res <- aggregate(Freq~City,df2, FUN=sum)
res
#     City Freq
#1    lille   12
#2    paris   69
#3 toulouse   60

res$City <- sprintf('%s%s', toupper(substr(res$City,1,1)),
                 sub('^.', '', res$City))

df2我不明白为什么您的代码不能与我的数据帧一起工作。我有以下错误:tolower中的错误(sub(“\\s+.*$”,“”,City)):无效的多字节字符串17715。我所要求的正是你给我的答案。@Marie我的代码基于我显示的数据(即dput输出)是可复制的。您的数据结构未知。最好显示dput outputOk,抱歉。我将编辑我的帖子,并向您展示我的数据(或至少是数据的头部)。@Marie您可以展示
dput(droplevels(head(yourdata))
的输出基于您新的
数据
dput输出,它应该是一个单行聚合输出,我得到
聚合(frequency,transform(data,City=tolower(sub(“\\s+.$”,'',City))),FUN=sum)#城市频率1巴黎23986
检查是否有任何非ASCII字符。你也可以看看谢谢,我有一个非ASCII字符的问题!现在它工作得很好!
df1 <- structure(list(City = structure(c(3L, 4L, 5L, 6L, 7L, 2L, 1L), 
.Label = c("Lille", 
"Paris", "Paris 01", "Paris 03", "Paris 15", "PARIS 20", "Toulouse"
), class = "factor"), Freq = c(12, 15, 25, 2, 60, 15, 12)),
.Names =    c("City", 
"Freq"), row.names = c(NA, -7L), class = "data.frame")