gpt4 book ai didi

重命名查找表中的列

转载 作者:行者123 更新时间:2023-12-05 08:33:55 28 4
gpt4 key购买 nike

我正在尝试使用查找表中的匹配重命名数据框中的列。

oldvars = c("mpg", "cyl" , "disp",  "hp", "drat", "wt", "qsec", "vs", "am", "gear", "carb")
newvars = c("Miles Per Gallon", "Cycle", "Displacement", "Horsepower", "Distance Rating",
"Working Time", "Quick Second", "Versus", "America", "Gears", "Carbohydrates")

lookup = data.frame(oldvars, newvars)
mycars = mtcars

使用查找列表匹配旧变量并将它们更改为新变量,这样 names(mycars) 将输出 "Miles Per Gallon", "Cycle", "Displacement", "Horsepower ", "距离等级", "工作时间", "快秒", "对战", "美国", "齿轮", "碳水化合物"

我已经尝试使用 colnames 来更改名称,但它并没有像我预期的那样读取变量。以下

for(i in 1:length(newvars)) {
colnames(mycars)[oldvars[i]] = newvars[i]
}

只输出NA

最佳答案

如果您知道它们的顺序相同(就像它们在您的示例中一样),那么答案很简单:

names(mycars) = newvars

但是,让我们关注更一般的情况——并非所有列都需要重命名,名称向量中可能有一些额外的名称,并且顺序不一定相同:

old_vars = c("cyl" ,"mpg",  "disp",  "foo")
new_vars = c( "Cycle", "Miles Per Gallon", "Displacement", "bar")
lookup = data.frame(old_vars, new_vars)

mycars = head(mtcars, 2) # short data frame to work with

然后 match 是确定正确顺序的 friend :

name_match = match(names(mycars), lookup$old_vars)
name_match
[1] 2 1 3 NA NA NA NA NA NA NA NA

# assign the names
names(mycars)[na.omit(name_match)] = lookup$new_vars[!is.na(name_match)]

data.table 有一个非常好的接口(interface),setnames 接受新旧名称的向量

library(data.table)
setDT(mycars) # convert the data frame to data.table
setnames(mycars, old = lookup$old_vars, new = lookup$new_vars) # update names by reference

旧的 plyr 包有一个 rename 函数,它接受一个命名向量,其中向量值是新名称,向量名称是旧名称:

plyr::rename(mycars, setNames(lookup$new_vars, lookup$old_vars))

关于重命名查找表中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34725617/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com