web-dev-qa-db-ja.com

Rのデータフレームの最初の行を削除するにはどうすればよいですか?

各列が1000行を超える11列のデータセットがあります。列にはV1、V2、V11などのラベルが付けられました。「c」コマンドを使用して、名前をより便利なものに置き換えました。行1にも各列のラベルが含まれていて、実際のデータは行2から始まることに気付きませんでした。

行1を削除してデクリメントする方法はありますか?

77
akz

次のように元のファイルのラベルを保持します。

df = read.table('data.txt', header = T)

Xおよびyという名前の列がある場合、次のようにアドレス指定できます。

df$x
df$y

Data.frameから最初の行を実際に削除する場合は、次のように負のインデックスを使用できます。

df = df[-1,]

Data.frameから列を削除する場合は、NULLを割り当てることができます。

df$x = NULL

Rでdata.frameを作成および操作する方法の簡単な例を次に示します。

# create a data.frame with 10 rows
> x = rnorm(10)
> y = runif(10)
> df = data.frame( x, y )

# write it to a file
> write.table( df, 'test.txt', row.names = F, quote = F )

# read a data.frame from a file: 
> read.table( df, 'test.txt', header = T )

> df$x
 [1] -0.95343778 -0.63098637 -1.30646529  1.38906143  0.51703237 -0.02246754
 [7]  0.20583548  0.21530721  0.69087460  2.30610998
> df$y
 [1] 0.66658148 0.15355851 0.60098886 0.14284576 0.20408723 0.58271061
 [7] 0.05170994 0.83627336 0.76713317 0.95052671

> df$x = x
> df
            y           x
1  0.66658148 -0.95343778
2  0.15355851 -0.63098637
3  0.60098886 -1.30646529
4  0.14284576  1.38906143
5  0.20408723  0.51703237
6  0.58271061 -0.02246754
7  0.05170994  0.20583548
8  0.83627336  0.21530721
9  0.76713317  0.69087460
10 0.95052671  2.30610998

> df[-1,]
            y           x
2  0.15355851 -0.63098637
3  0.60098886 -1.30646529
4  0.14284576  1.38906143
5  0.20408723  0.51703237
6  0.58271061 -0.02246754
7  0.05170994  0.20583548
8  0.83627336  0.21530721
9  0.76713317  0.69087460
10 0.95052671  2.30610998

> df$x = NULL
> df 
            y
1  0.66658148
2  0.15355851
3  0.60098886
4  0.14284576
5  0.20408723
6  0.58271061
7  0.05170994
8  0.83627336
9  0.76713317
10 0.95052671
128
James Thompson

負のインデックスを使用して行を削除できます。例:

dat <- dat[-1, ]

以下に例を示します。

> dat <- data.frame(A = 1:3, B = 1:3)
> dat[-1, ]
  A B
2 2 2
3 3 3
> dat2 <- dat[-1, ]
> dat2
  A B
2 2 2
3 3 3

つまり、行1で終わったラベルを単に削除するよりも多くの問題を抱えている可能性があります。Rがデータをテキストとして解釈し、それからファクターに変換された可能性が高くなります。 str(foo)fooはデータオブジェクト)がデータ型について何を言っているかを確認してください。

データを読み込むには、呼び出しでheader = TRUEが必要なだけのようです(read.table()またはそのラッパーの1つを介して読み込むと仮定します)。

25
Gavin Simpson

行1を削除したい人はおそらくいないでしょう。意味のある何かを探しているなら、それは条件付き選択です

#remove rows that have long length and "0" value for vector E

>> setNew<-set[!(set$length=="long" & set$E==0),]
12
user3495945

私は専門家ではありませんが、これも同様に機能する可能性があります。

dat <- dat[2:nrow(dat), ]
5
Bipul Mohanto

dat <- dat[-1, ]は動作しましたが、データフレームを強制終了し、別のタイプに変更しました。代わりにdat <- data.frame(dat[-1, ])を使用する必要がありましたが、このデータフレームには最初は1列しかなかったため、これはおそらく特殊なケースです。

5
cardamom

最も投票された答えには同意しますが、最初の行を除くすべての行を保持する別の方法を次に示します。

dat <- tail(dat, -1)

これは、Hadley Wickhamのdplyrパッケージを使用しても実現できます。

dat <- dat %>% slice(-1)
3
EMcKinney