2017-11-09 8 views
0
library(tidyverse) 

以下のサンプルデータを使用して、私はDf1とDf2という2つのデータフレームを持っています。私は文字列で列を選択する単純な関数を作成しようとしています。この場合、 "Person"で始まる両方のデータフレームの列と "Phone"を含むすべての列が作成されます。関数内で "Starts_with"と共にDplyr :: Rename_Atを使用する方法

次に、両方のデータフレームの「Person」列の名前を「Id」に変更したいとします。

ただし、リネーム機能が正常に動作するようになっています。ここで

はどのように

rename_at(vars(starts_with("Person"),funs("Id"=.))) 

rename("Id"=names(.)[1]) 

...

以下
Funs<-function(Df){ 
Df%>%select(starts_with("Person"),contains("Phone"))%>% 
rename_at(vars(starts_with("Person"),"Id")) 
} 

は私がしようとしたが、うまくいきませんでした "名前の変更" の他のいくつかのバリエーションが...最初の試みであるIべきこれを修正しますか?私はそれが十分に簡単なようですので、このサイト上で同様の質問を見つけることを試みたが、私は働く何かを見つけることができませんでした...

サンプルデータ:

`Person #`<-c(199,148,148,145,177,165,144,121,188,188,188,111) 
`Phone #1`<-c(6532881717,6572231223,6541132112,6457886543,6548887777,7372222222,6451123425,6783450101,7890986543,6785554444,8764443344,6453348736) 
`Phone #2`<-c(NA,NA,NA,NA,NA,7372222222,NA,NA,NA,6785554444,NA,NA) 
Animals<-c("Cat","Dog","Elephant","Giraffe","Bird","Snake","Skunk","Raccoon","Moose","Turtle","Beaver","Porcupine") 

Df1<-data.frame(`Person #`,`Phone #1`,`Phone #2`, Animals) 


`Person ID #`<-c(199,148,142,145,177,165,144,121,182,109,188,111) 
`Phone s 1`<-c(6532881717,6572231223,6541132112,6457886543,6548887777,7372222222,6451123425,6783450101,7890986543,6785554400,8764443344,6453348736) 
`Phone s 2`<-c(NA,NA,NA,NA,NA,7372222222,NA,NA,NA,6785554444,NA,NA) 
Animals<-c("Cat","Dog","Elephant","Giraffe","Bird","Snake","Skunk","Raccoon","Moose","Turtle","Beaver","Porcupine") 

Df2<-data.frame(`Person ID #`,`Phone s 1`,`Phone s 2`, Animals) 
+0

が、それは別のものを必要としません引数? ['rename_at(.tbl、.vars、.funs = list()、...)'](https://github.com/tidyverse/dplyr/blob/7e90e95258010c8c43d856f3f9af927546a9c833/R/colwise-select.R#L76) 。またはあなたはクローズドパレンを逃していますか? – r2evans

答えて

1

これら2つのオプションが動作し、しかし非常に壊れやすいと思われますこのように名前を変更するにはあなたはすなわちstarts_with('Person')の条件を満たしている正確に一つの列、持っている場合にのみ動作します:

Df1 %>% rename_at(vars(starts_with('Person')), ~ 'ID') 

Df1 %>% rename_at(1, ~ 'ID') 

を両方与える:

# ID Phone..1 Phone..2 Animals 
#1 199 6532881717   NA  Cat 
#2 148 6572231223   NA  Dog 
#3 148 6541132112   NA Elephant 
# ... 

またはfuns使用:

Df1 %>% rename_at(vars(starts_with("Person")),funs(function(.) 'ID')) 
関連する問題