在 R 中查找和替换值
Find and Replace values in R
我想在数据框的一列中找到一个特定的值,然后用我想要的任何值替换。
例如,我有一个包含城市名称(第 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
修改 'City' 列
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))
数据
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")
我想在数据框的一列中找到一个特定的值,然后用我想要的任何值替换。
例如,我有一个包含城市名称(第 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))
数据
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")