在R中同时重命名数据帧中的多个单元格



我想根据英国的地区对每个警察局进行分组,但作为一个新手,我不知道如何同时重命名多个元素。

示例:它目前看起来像

雅芳和萨默塞特郡、多塞特郡、格洛斯特郡和威尔特郡的警察局位于西南部。我需要一个将上面的警察局重新命名为";西南";。

我会在我从英国警方网站下载的原始csv数据集中进行分析,但我的分析范围从2019年1月到2020年11月,每个csv数据集只能按月、按地区下载(总共约900个csv文件(。

我知道下面的函数可以在数据帧中选择单个单元格,但是这个数据集太大了,不可行。

data[row number, col number] <- "South West"

任何建议都将不胜感激。提前感谢你救了一个新手。

p.s.我使用合并了2019年和2020年每个警察局的每个csv数据集

crimedata19_20 <- list.files(path="C:/Users/X/Desktop/Crime data/2019-2020",
pattern="*.csv")
crimedata19_20 <- do.call("rbind",lapply(crimedata19_20,FUN=function(files){ read.csv(files)})) 

使用gsub可以替换模式使用R附带的iris数据集的示例:

iris[49:52, ]
#    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
# 49          5.3         3.7          1.5         0.2     setosa
# 50          5.0         3.3          1.4         0.2     setosa
# 51          7.0         3.2          4.7         1.4 versicolor
# 52          6.4         3.2          4.5         1.5 versicolor

"Species"列中的所有"setosa"替换为"South West"

res <- transform(iris,
Species=gsub(pattern="setosa", replacement="south West", Species))
res[49:52, ]
#    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
# 49          5.3         3.7          1.5         0.2 south West
# 50          5.0         3.3          1.4         0.2 south West
# 51          7.0         3.2          4.7         1.4 versicolor
# 52          6.4         3.2          4.5         1.5 versicolor

编辑

可以用|(或(分隔多个替换项。

res2 <- transform(iris,
Species=gsub(pattern="setosa|versicolor", replacement="south West", Species))
res2[49:52, ]
#    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
# 49          5.3         3.7          1.5         0.2 south West
# 50          5.0         3.3          1.4         0.2 south West
# 51          7.0         3.2          4.7         1.4 south West
# 52          6.4         3.2          4.5         1.5 south West

使用与@jay.sf相同的数据,可以在数据帧中存储唯一值,然后使用match():进行替换

#Keys
Keys <- data.frame(Species=unique(iris$Species),
Replace=c('South','North','East'),stringsAsFactors = F)

它看起来是这样的:

Keys
Species Replace
1     setosa   South
2 versicolor   North
3  virginica    East

接下来,替换:

#Replace
iris$Species <- Keys[match(iris$Species,Keys$Species),"Replace"]

输出:

head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2   South
2          4.9         3.0          1.4         0.2   South
3          4.7         3.2          1.3         0.2   South
4          4.6         3.1          1.5         0.2   South
5          5.0         3.6          1.4         0.2   South
6          5.4         3.9          1.7         0.4   South
tail(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
145          6.7         3.3          5.7         2.5    East
146          6.7         3.0          5.2         2.3    East
147          6.3         2.5          5.0         1.9    East
148          6.5         3.0          5.2         2.0    East
149          6.2         3.4          5.4         2.3    East
150          5.9         3.0          5.1         1.8    East

只需完成方法

library(data.table)
crimedata19_20 <-data.table(crimedata19_20)
West_cols<-c("name1", "name2", ...)
crimedata19_20[Falls.within %in% West_cols, Area:="South West"]

我不会使用gsub,而是为您的区域创建一个新列。也许你稍后需要有关电台的信息。

最新更新