2017-07-10 5 views
0

以下は、Datacampの練習問題です。角カッコ内にマイナス記号を使用する

3つのシートすべてを含めるためにcbind()呼び出しを使用します。 urban_sheet2とurban_sheet3の最初の列が削除されていることを確認して、重複する列がないようにします。結果を都市に格納する。

コード:

# Add code to import data from all three sheets in urbanpop.xls 
path <- "urbanpop.xls" 
urban_sheet1 <- read.xls(path, sheet = 1, stringsAsFactors = FALSE) 
urban_sheet2 <- read.xls(path, sheet = 2, stringsAsFactors = FALSE) 
urban_sheet3 <- read.xls(path, sheet = 3, stringsAsFactors = FALSE) 

# Extend the cbind() call to include urban_sheet3: urban 
urban <- cbind(urban_sheet1, urban_sheet2[-1],urban_sheet3[-1]) 

# Remove all rows with NAs from urban: urban_clean 
urban_clean<-na.omit(urban) 

CBINDの最初の列を削除するには[-1]を使用して、なぜ私の質問です。 cbind()の中に角かっこを特別に使用していますか?つまり、最初の2つの列を削除する場合、コードはurban_sheet2[-2]になるはずですか?私は角括弧が特定の列や行を選択するために使用されることを知っているだけです。これは私を混乱させる。

+2

サブセット化の学習を開始するサンプルがたくさんあります。 http://www.statmethods.net/management/subset.html –

+0

[Rのdata.frameから列全体を削除](https://stackoverflow.com/questions/6286313/remove-an-entire)の可能な複製-c-data-frame-in-r) –

答えて

2

cbind()に特定されていません。角括弧の中に-を使用して、必要な特定の行または列を削除できます。データフレームがdfの場合、df[,-1]の最初の列は削除されます。 df[,-2]は、2番目(唯一の2番目)の列が削除されます。 df[,-c(1,2)]は、第1列と第2列の両方を削除します。同様に、df[-1,]の最初の行が削除されます。

これは列名では実行できません。たとえば、df[,-"var1"]は機能しません。列名を使用するには、df[,-which(names(df) %in% "var1")]のようにwhich()を使用できますが、単純にdf[,!names(df) %in% "var1")]と同じ結果が得られます。 subset()subset(df, select = -c(var1, var2))を使用することもできます。 "var1"と "var2"という名前の列が削除されます。

行と列を削除すると、呼び出しの出力にのみ影響し、出力が元のオブジェクトに割り当てられていない限り、元のオブジェクトには影響しません。

+0

これは完璧な意味があります。しかし、そのコンマがない 'urban_sheet2 [-1]'コードがDatacampで動作するのはなぜですか?それは間違いか[、-1]は[-1]と等しいですか? – Eva

+0

データフレームがある場合、コンマを参照するためにコンマを省略できます。私はいつもそれをインクルードして、ベクトルの項目ではなくデータフレームまたは行列の列を参照していることを明確にすることを好みます。コンマを省略すると、私の意見では、物事をもっと混乱させるだけのショートカットです。 – Noah

関連する問題