0

SO の助けを借りて、選択したサブセットを除く、データ フレーム内のすべての変数の名前を変更する方法ができました。私は現在この方法を使用しています。ブローを参照してください ( flodelに感謝します)。

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")  

初期関数形式 flodel

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 に答える