2012-05-11 8 views
1

私は列名がz_1、z_2からz_200までのデータフレームを持っています。次の例では、表現を簡単にするため、私は、データフレームデータフレームの列名へのアクセス

一方から除去する必要がある要素にアクセスするためのループIに使用されるだけZ_1

df <- data.frame(x=1:5, y=2:6, z_1=3:7, u=4:8) 
df 
i=1 
tmp <- paste("z",i,sep="_") 
subset(df, select=-c(tmp)) 

上記のコードを示してい上記のコードを実行、私は「-c(TMP)でエラーが発生しました:単項演算子に無効な引数」エラーが出る

はあなたの助けをありがとうを

+0

も参照してくださいこの質問で回答:[ドロップの列Rのデータフレーム](http://stackoverflow.com/questions/4605206/drop-columns -r-data-frame) –

答えて

1

試してみてください。

df[names(df)!=tmp] 

tmpは文字であるため)は、コードが機能しない理由は何も評価されません。この方法は、数値のみで除外することができます。

また、これも動作します:

subset(df, select=-which(names(df)==tmp)) 

whichは数を返すため。

1

サブセットを使用して、同じ名前の列が多数含まれている場合は、通常はgreplを使用して、列名と一致する論理ベクトルを作成することを検討します(または、数字のベクトルと同じように)。結果の否定は、列これはあなたが削除することができます(または、それが含まれずに)すべての列がそのパターンを使用して「Z」で始まる否定して

df <- data.frame(x=1:5, y=2:6, z_1=3:7, u=4:8) 
df 
i=1 
tmp <- paste("z",i,sep="_") 
subset(df, select= !grepl("^z", names(df))) 
    x y u 
1 1 2 4 
2 2 3 5 
3 3 4 6 
4 4 5 7 
5 5 6 8 

を削除します。それとも、文字値との組み合わせでvalue =TRUEgrepを使用することができます。

subset(df, select= c("x", grep("^z", names(df), value=TRUE))) 
関連する問題