0

在 SO 的帮助下,我现在可以重命名数据框中的所有变量,除了选定的子集。我目前正在使用这种方法,请参阅打击(感谢florel)。

我想编写一个函数,我可以在其中定义 1)我的数据,2)变量向量和 3)我想在函数中未选择的变量中添加什么前缀(请参阅下面的尝试)。我错误地认为这很容易,但我很难让该功能正常工作。

这是我编写函数的尝试,这显然不起作用。另外,如果有人推荐一个站点或一些文本,我可以阅读以更好地理解如何编写函数。

baRadd <- function(df, vector, suffix){names(df) <- 
                   ifelse(names(df) %in% vector,names(df), 
                   paste(suffix, names(df), sep = ".")) }

data(mtcars)
temp.mtcars <- mtcars
baRadd(temp.mtcars, c("mpg", "cyl", "disp"), "baR")  

初始函数形式 florel

data(mtcars)
# head(mtcars)

temp.mtcars <- mtcars
names(temp.mtcars) <- ifelse(names(mtcars) %in% c("mpg", "cyl", "disp"),
                         names(mtcars),
                         paste("baR", names(mtcars), sep = "."))
str(temp.mtcars)
'data.frame': 32 obs. of  11 variables:
 $ mpg     : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl     : num  6 6 4 6 8 6 8 4 4 6 ...
 $ disp    : num  160 160 108 258 360 ...
 $ baR.hp  : num  110 110 93 110 175 105 245 62 95 123 ...
 $ baR.drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ baR.wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ baR.qsec: num  16.5 17 18.6 19.4 17 ...
 $ baR.vs  : num  0 0 1 1 0 1 0 1 1 1 ...
 $ baR.am  : num  1 1 1 0 0 0 0 0 0 0 ...
 $ baR.gear: num  4 4 4 3 3 3 3 4 4 4 ...
 $ baR.carb: num  4 4 1 1 2 1 4 2 2 4 ...
4

1 回答 1

5

主要问题是您的函数不返回任何值。它只是修改 data.frame df,(这是评估环境的本地)然后退出。

要让它返回修改后的对象,请执行以下操作:

data(mtcars)
mtcars1 <- mtcars

baRadd <- function(df, vector, suffix){ 
                   names(df) <- ifelse(names(df) %in% vector,names(df), 
                                      paste(suffix, names(df), sep = ".")) 
                   return(df)}

mtcars1 <- baRadd(mtcars1, c("mpg", "cyl", "disp"), "baR") 

更好的解决方案(在我看来)是编写一个函数来创建一个修改后的名称向量,然后您可以将其分配给现有的 data.frame。

mtcars2 <- mtcars
baRadd2 <- function(df, vector, suffix){ 
                    newnames <- ifelse(names(df) %in% vector,names(df), 
                                       paste(suffix, names(df), sep = ".")) 
                    return(newnames)}

names(mtcars2) <- baRadd2(mtcars2, c("mpg", "cyl", "disp"), "baR") 
于 2012-05-21T17:46:19.187 回答