R에서 데이터 프레임의 첫 번째 행을 삭제하는 방법은 무엇입니까?


85

각각 1000 개가 넘는 행이있는 11 개의 열이있는 데이터 세트가 있습니다. 열은 V1, V2, V11 등으로 레이블이 지정되었습니다. "c"명령을 사용하여 이름을 더 유용한 것으로 대체했습니다. 행 1에도 각 열에 대한 레이블이 포함되어 있고 실제 데이터가 행 2에서 시작된다는 사실을 몰랐습니다.

행 1을 삭제하고 감소시키는 방법이 있습니까?

답변:


139

다음과 같이 원본 파일의 레이블을 유지하십시오.

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

3
@akz : in header=Tthe Tstand for TRUE라는 것이 분명한지 확실하지 않으므로이 매개 변수는 R에게 헤더를로드하도록 지시합니다. 자세한 내용은를 참조 ?read.table하십시오.
daroczig 2011 년

참고 단일 컬럼 데이터 프레임이있는 경우 다음이 대답에 모습을하시기 바랍니다 - stackoverflow.com/a/3232770/4606130을 당신이 필요합니다 경우 drop = FALSE뿐만 아니라 때 부정적인 색인
micstr

28

네거티브 인덱싱을 사용하여 행을 제거 할 수 있습니다. 예 :

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()또는 래퍼 중 하나를 통해 읽었다 고 가정 ).


13

아무도 실제로 행 1을 제거하고 싶지 않습니다. 의미있는 것을 찾고 있다면 조건부 선택입니다.

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

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

질문하지 않은 질문에 대한 답변입니다. 돕는 것보다 더 혼란 스러워요.
U. Windl

12

가장 많이 득표 한 답변에 동의하지만 첫 번째 행을 제외한 모든 행을 유지하는 또 다른 방법이 있습니다.

dat <- tail(dat, -1)

이는 Hadley Wickham의 dplyr패키지를 사용하여 수행 할 수도 있습니다 .

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

7

나는 전문가는 아니지만 이것도 효과가있을 수 있습니다.

dat <- dat[2:nrow(dat), ]

실제로 이것은 nrow(dat) == 1다음과 같은 경우 작동하지 않습니다 . 그러면 원본 데이터가 보존됩니다.
U. Windl

6

dat <- dat[-1, ]작동했지만 데이터 프레임을 죽여서 다른 유형으로 변경했습니다. 대신 사용해야 dat <- data.frame(dat[-1, ])했지만이 데이터 프레임에는 처음에 열이 하나만 있었기 때문에 이것은 아마도 특별한 경우 일 수 있습니다.


이것은 답변이 아니라 코멘트입니다! 그럼에도 불구하고 나는 번식 할 수 없었다.
U. Windl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.