2011-11-07 5 views
1

大きなdata.frame列名(名前(mp))を他のdata.frameから単一の列を変更することで変更したいMPの$名)R:他のdata.frameの列の要素から見出しを一致させ、削除する

#first data frame : column chooser, small data.frame with 
# list of columns and other information 

mp <- data.frame(name = c("A", "C", "D"), pos = 1:3) # number of rows 
                #in real dataset is> 5,000 
       name pos 
      1 A 1 
      2 C 2 
      3 D 3 

ビッグデータフレーム、>読み取り意味で万個の変数が、わずか4は、融点$名の各値は、2つの変数に対応し、ここで

# second data.frame 
mydf <- data.frame(Aa= 1:10, Ab = 11:20, Ba = 21:30, Bb = 31:40, 
Ca = 41:50, Cb = 51:60, Da = 61:60,Db = 61:70) 

を示している - 例えばAは、AAに対応同様に、BはBaおよびBbに対応する。すべてのそのような重複した変数は、接尾辞「a」と「b」

> mydf 
    Aa Ab Ba Bb Ca Cb Da Db 
1 1 11 21 31 41 51 61 61 
2 2 12 22 32 42 52 60 62 
3 3 13 23 33 43 53 61 63 
4 4 14 24 34 44 54 60 64 
5 5 15 25 35 45 55 61 65 
6 6 16 26 36 46 56 60 66 
7 7 17 27 37 47 57 61 67 
8 8 18 28 38 48 58 60 68 
9 9 19 29 39 49 59 61 69 
10 10 20 30 40 50 60 60 70 

何かがMPの$名から削除された場合私の考えは、データフレームmydfに対応する列を削除する必要があるがあります。上記の例では、例えば(から2つの変数を対応MPから単VARの欠失があるが、新たなデータフレームmydf1

 mydf1 
     Aa Ab Ca Cb Da Db 
    1 1 11 41 51 61 61 
    2 2 12 42 52 60 62 
    3 3 13 43 53 61 63 
    4 4 14 44 54 60 64 
    5 5 15 45 55 61 65 
    6 6 16 46 56 60 66 
    7 7 17 47 57 61 67 
    8 8 18 48 58 60 68 
    9 9 19 49 59 61 69 
    10 10 20 50 60 60 70 

を作成すること列BaおよびBBがmydfから除去されるべきでない「B」、存在しませんmydfは、ここで示されている)を除去し、n個のそのような欠失の数と最終とすることができるが存在する列名またはMP要素の順序を維持しなければならない

ヘルプが

答えて

3

名前とその長さを抽出理解されます。長さを知ることで、最後の文字(a/bサフィックス)を簡単に切り取ることができます。私はすべての名前がちょうど2文字であると仮定していない。

nm <- names(mydf) 
lens <- nchar(nm) 

サブセットは、最後の文字がない列名に基づいています。

mydf1 <- mydf[substr(nm, 1, lens-1) %in% mp$name] 
+0

あなたの前提は文字数が多く、可変です – SHRram

関連する問題