2017-08-03 10 views
2

この質問に対する回答はstackoverflowを検索しましたが、これまでのところ運がありませんでした。私の要求:変数の値/型を使用して列の名前を変更する

簡単なデータフレームの場合:私は(例えば、D [1]または元の列名を参照せずに変数の型/文字列の内容に基づいて、変数の名前を変更して行くにはどうすればよい

# create dummy data.frame 
d <- data.frame(var1 = as.character(1:5), 
       var2 = factor(letters[1:5]), 
       var3 = 1:5, stringsAsFactors = FALSE, 
       var4 = rep("<div class='The mink cat'< /p>'",5)) 

var1)?

var1-var3の名前を、各変数の値の型によって指定された文字、因子、数値に変更します。

変数値を検索し、文字列 'the mink cat'の一部を利用してvar4の名前を 'mink'に変更します。たぶん、このような

+0

をpurrrライブラリを使用しますが、 'NM1 <意味でした - sapply(D、クラス)。 名前(d)[1:3] < - nm1 [1:3] ' – akrun

答えて

1

、解決策を持っている列のインデックスを取得し、そのオブジェクト(「NM1」)との列、最後に、unlist最初の行に名前を付け、sapplyの列のclassを見つけることであろう'ミンク' と 'ミンク' に列名を割り当てる

nm1 <- sapply(d, class) 
names(d) <- nm1 
names(d)[grep("mink", unlist(d[1,]))] <- "mink" 
d 
# character factor integer       mink 
#1   1  a  1 <div class='The mink cat'< /p>' 
#2   2  b  2 <div class='The mink cat'< /p>' 
#3   3  c  3 <div class='The mink cat'< /p>' 
#4   4  d  4 <div class='The mink cat'< /p>' 
#5   5  e  5 <div class='The mink cat'< /p>' 
1

colnames(d) = lapply(d,class) 
colnames(d)[sapply(d, function(x) any(grepl("cat",x)))] = "mink" 

出力:それは 'ミンク' を含んでいるので、最後の列は、 'ミンク' に名前が変更され

character factor integer       mink 
1   1  a  1 <div class='The mink cat'< /p>' 
2   2  b  2 <div class='The mink cat'< /p>' 
3   3  c  3 <div class='The mink cat'< /p>' 
4   4  d  4 <div class='The mink cat'< /p>' 
5   5  e  5 <div class='The mink cat'< /p>' 

。我々は以前にコメントしたよう

2

より簡略化コードを

library(purrr) 
colnames(d) <- map_chr(d, class) 

d 

    character factor integer      character 
1   1  a  1 <div class='The mink cat'< /p>' 
2   2  b  2 <div class='The mink cat'< /p>' 
3   3  c  3 <div class='The mink cat'< /p>' 
4   4  d  4 <div class='The mink cat'< /p>' 
5   5  e  5 <div class='The mink cat'< /p>' 
関連する問題