DPLYR RENAME_IFで切り替えた列 -- r フィールド と dplyr フィールド 関連 問題

Switched columns with dplyr rename_if












0
vote

問題

日本語

DPLYR rename_if と古いパターンのリストとリストを使用して、一部の列名を使用して、一部の列名が出力されて出力されます。

<事前> <コード> 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 lst <- list(Old=c("mpg", "cyl", "disp", "carb", "wt", "gear"), New=c("Miles per Gallon", "Cylinder", "Displacement", "Carburator", "Weight", "Gear")) mtcars %>% rename_if(names(.) %in% lst$Old, function(x){ lst$New[which(lst$Old %in% x)]}) %>% head() Miles per Gallon Cylinder Displacement hp drat Carburator Mazda RX4 21.0 6 160 110 3.90 2.620 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 Datsun 710 22.8 4 108 93 3.85 2.320 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 Hornet Sportabout 18.7 8 360 175 3.15 3.440 Valiant 18.1 6 225 105 2.76 3.460 qsec vs am Weight Gear Mazda RX4 16.46 0 1 4 4 Mazda RX4 Wag 17.02 0 1 4 4 Datsun 710 18.61 1 1 4 1 Hornet 4 Drive 19.44 1 0 3 1 Hornet Sportabout 17.02 0 0 3 2 Valiant 20.22 1 0 3 1

<コード> wt および<コード> Carburator 列が切り替えられたことを確認できます。

参照名リストがデータフレーム列と同じ順序でない場合、 rename_if を使用して列の名前を変更する方法?

編集 rename_at(lst$Old, ~lst$New) の使用は、参照リストに特定のデータフレーム列に存在しない名前を含む場合は機能しません。

例えば:

<事前> <コード> lst <- list(Old=c("mpg", "cyl", "disp", "carb", "wt", "gear", "xtra"), New=c("Miles per Gallon", "Cylinder", "Displacement", "Carburator", "Weight", "Gear", "ExtraCol"))

(<コード> xtra および<コード> ExtraCol 名)

を参照してください。
英語

Trying to rename some data frame columns using dplyr rename_if and lists of old and new patterns, some column names end up switched in the output.

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  lst <- list(Old=c("mpg", "cyl", "disp", "carb", "wt", "gear"), New=c("Miles per Gallon", "Cylinder", "Displacement", "Carburator", "Weight", "Gear"))  mtcars %>%  rename_if(names(.) %in% lst$Old,           function(x){              lst$New[which(lst$Old %in% x)]}) %>%  head()                   Miles per Gallon Cylinder Displacement  hp drat Carburator Mazda RX4                     21.0        6          160 110 3.90      2.620 Mazda RX4 Wag                 21.0        6          160 110 3.90      2.875 Datsun 710                    22.8        4          108  93 3.85      2.320 Hornet 4 Drive                21.4        6          258 110 3.08      3.215 Hornet Sportabout             18.7        8          360 175 3.15      3.440 Valiant                       18.1        6          225 105 2.76      3.460                    qsec vs am Weight Gear Mazda RX4         16.46  0  1      4    4 Mazda RX4 Wag     17.02  0  1      4    4 Datsun 710        18.61  1  1      4    1 Hornet 4 Drive    19.44  1  0      3    1 Hornet Sportabout 17.02  0  0      3    2 Valiant           20.22  1  0      3    1 

We can see that the wt and Carburator columns have been switched.

How to rename columns using rename_if when the reference name lists are not in the same order as the data frame columns?

EDIT The use of rename_at(lst$Old, ~lst$New) does not work when the reference lists contain names not present in the particular data frame columns.

For example with:

lst <- list(Old=c("mpg", "cyl", "disp", "carb", "wt", "gear", "xtra"), New=c("Miles per Gallon", "Cylinder", "Displacement", "Carburator", "Weight", "Gear", "ExtraCol")) 

(see the xtra and ExtraCol names)

</div
     

回答リスト

0
 
vote

rename_if の代わりに、置き換える列の名前があるため、 rename_at で試してください。

<事前> <コード> library(dplyr) head(mtcars) %>% rename_at(lst$Old, ~lst$New)

しかし<コード> _at / <コード> _if / <コード> // Diabled this.myFormGroup.markAllAsDisabled(true); // Enabled this.myFormGroup.markAllAsDisabled(false); 0 バリアントは置き換えられていますので、 // Diabled this.myFormGroup.markAllAsDisabled(true); // Enabled this.myFormGroup.markAllAsDisabled(false); 1 <コード> // Diabled this.myFormGroup.markAllAsDisabled(true); // Enabled this.myFormGroup.markAllAsDisabled(false); 2

基本rでは、 // Diabled this.myFormGroup.markAllAsDisabled(true); // Enabled this.myFormGroup.markAllAsDisabled(false); 3

を使用してこれを行うことができます。 <事前> <コード> // Diabled this.myFormGroup.markAllAsDisabled(true); // Enabled this.myFormGroup.markAllAsDisabled(false); 4

場合には、名前に存在しない // Diabled this.myFormGroup.markAllAsDisabled(true); // Enabled this.myFormGroup.markAllAsDisabled(false); 5 に値がある場合は、まずそれらをフィルタリングしてから上記の方法を使用することができます。

<事前> <コード> rename_at16

 

Instead of rename_if , try with rename_at since you have names of columns that you want to replace.

library(dplyr) head(mtcars) %>% rename_at(lst$Old, ~lst$New) 

However, _at/_if/_all variants have been superseded so try with rename_with.

head(mtcars) %>% rename_with(~lst$New, lst$Old)  #                  Miles per Gallon Cylinder Displacement  hp drat Weight  qsec vs am Gear Carburator #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 

In base R, we can do this using match :

names(mtcars)[match(lst$Old, names(mtcars))] <- lst$New 

In case, there are values in lst which are not present in names we can first filter them and then use the above method.

inds <- lst$Old %in% names(mtcars) lst <- lapply(lst, `[`, inds) 
</div
 
 
   
   
0
 
vote
vote
ベストアンサー
 

// Diabled this.myFormGroup.markAllAsDisabled(true); // Enabled this.myFormGroup.markAllAsDisabled(false); 7 による // Diabled this.myFormGroup.markAllAsDisabled(true); // Enabled this.myFormGroup.markAllAsDisabled(false); 8 は、発生順に索引を保持し、問題を解決します。 <事前> <コード> // Diabled this.myFormGroup.markAllAsDisabled(true); // Enabled this.myFormGroup.markAllAsDisabled(false); 9

 

Replacing which() by match() keeps indexes by order of occurrence and solves the problem

mtcars %>% rename_if(names(.) %in% lst$Old, function(x){lst$New[match(x, lst$Old)]}) 
</div
 
 

関連する質問

0  左側のデータフレームを左join()に参加する[重複]  ( Joining two data frames with left join ) 
この質問はすでにここで回答を持っています データフレーム(内側、外側、左、左、左)右) (13回答) 閉じた ...

0  DPLYRを使用して、定義されたグローバル変数にフィルタをフィルタしますか?  ( How do i use dplyr to filter to a pre defined global variable ) 
次のシナリオがあるとしましょう。私のデータセットは月の最後の日を使用する場所に毎月変更されます。 DPLYRパイプ関数でこの複数回変更することを避けるために、グローバル環境でこの変数を事前定義したいので、DPLYRでは、ColumnParamを選択、フィルタ...

0  Rの照合ケースに基づいて列を変更する  ( Change column based on matched cases in r ) 
私はこののように見えるData.frameを持っています <事前> <コード> data=data.frame(time=c(1,1,0.5,1), columnB= c(1,2,5,6), columnC= c(1,2,2,5)) <事前> <コード>...

4  巻き巻き毛を用いて変異を変異させる[二重]  ( Mutate a variable with curly curly ) 
この質問はすでにここで回答を持っています `dplyr` で動的変数名を使用する (9回答) 閉じた 5月前...

1  RとPURRRを使用して、PMAPを持つリストのリストを使用して複数のデータフレームに参加する  ( Using r and purrr to join multiple dataframes using a list of lists with pmap ) 
PMAPを使用してリストに埋め込まれているデータフレームをまとめようとしています。 <事前> <コード> library(purrr) library(plyr) # Create a list of 5 data frames create_df <- f...

1  データフレームの各列をフィルタリングすると、比類のない値の場合はNA  ( Filtering each column of a data frame an put na for unmatched values ) 
私は以下のような表を持っています: <事前> <コード> [,1] [,2] [,3] [,4] [,5] [1,] a A 0.06 0.31 -1.5 [2,] b B -0.75 0.2 ...

3  Shiny:dplyrはエラーメッセージを返します  ( Shiny dplyr returns error messages ) 
<コード> diamonds データセットと下のコードを使用する <事前> <コード> library(dplyr) library(ggplot2) diam <- diamonds %>% dplyr::select(cut, co...

0  展開DataFrameは `x`を示していますが、通常のシーケンスエラーではありません  ( Expand dataframe shows x is not a regular sequence error ) 
以下のデータフレームの拡張に問題があります。 <事前> <コード> library(tidyr) library(dplyr) options(digits = 10) library(readxl) 以下はデータフレームです。 <事前> <コード> c...

0  このステートメントを最適化する方法はありますか:ベクトルからの値の選択  ( Is there a way to optimize this statement selection of values from a vector ) 
私はこのコードを持っています、そして length(nodes_data_frame_name)は実際に 4398886 の周囲で、非常に大きくなる可能性があり、この操作を繰り返し実行する必要があります。 。 それをスピードアップする方法はありますか? li...

0  R:選択した数の列のみで周波数をパーセントに変換する  ( R convert frequency to percentage with only a selected number of columns ) 
頻度で埋められたデータフレームをDPLYRを使用して行ごとに埋められたデータフレームに変換します。 マイデータセットには、他の変数で埋められたものがあり、名前のベクトルで定義された列のセットの割合を計算したいだけです。さらに、DPLYRライブラリを使用したい...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有