希望somene可以帮助我。我希望使用xlsx工作簿重命名一些变量名作为R中的数据映射。如何使用我的数据映射将R数据集中的变量名重命名为New_Name下datampay中定义的名称。这是可能的吗?
> #call dataset
> df<-datasets::mtcars
> #head dataset
> head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
> #Call datamap
> datamap <-read_xlsx("...")
> #head datamap
> head(datamap)
# A tibble: 6 x 2
Original_Name New_Name
<chr> <chr>
1 mpg MilesPerGallon
2 cyl Cylinder
3 disp Display
4 hp HorsePower
5 drat D
6 wt W
提前感谢任何能够提供帮助的人
答案 0 :(得分:1)
读完xlsx工作簿后,基本上会有一个旧名称向量和一个新名称的向量(datamap$Original_Name
和datamap$New_Name
)。一旦你这样看,这个问题在这里有很多答案:Rename multiple columns by names
但如果您确信新名称的顺序正确,那么您可以简单地执行
names(DF) <- datamap$New_Name
或者如果你需要排队
names(DF)[match(datamap$Original_Name, names(DF))] <- datamap$New_Name
或许多使用data.table
等软件包的其他方式,如其他问题所述。
答案 1 :(得分:0)
有很多不同的方法可以做到这一点。我通常只是重命名列名。你可以这样解决你的问题:
colnames(mtcars)[1:6] <- datamap$New_Name
我认为这不是最强大的解决方案。如果你有这么多的列,你不一定能通过索引来计算和做,你可能会做一些比较漂亮的事情,如
colnames(mtcars)[colnames(mtcars) %in% datamap$New_Name] <- datamap$New_Name[colnames(mtcars) %in% datamap$New_Name]
答案 2 :(得分:0)
我认为,所有OP想要的是替换数据帧的几个列名。旧列与新列名称的映射在xls
中定义。映射已加载到tibble
。
有很多方法可以达到预期的结果,但简单的ifelse
应该足以提供所需的结果:
df<-datasets::mtcars
library(readxl)
datamap <-read_xlsx("D:/test.xlsx")
names(df) <- ifelse(names(df) %in% datamap$Original_Name, datamap$New_Name, names(df) )
head(df)
# MilesPerGallon Cylinder Display HorsePower D W qsec vs am gear carb
# Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
# Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
# Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
# Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
# Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
# Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1