จะลบแถวแรกของ dataframe ใน R ได้อย่างไร


86

ฉันมีชุดข้อมูล 11 คอลัมน์ที่มีมากกว่า 1,000 แถวต่อแถว คอลัมน์ถูกระบุว่า V1, V2, V11 ฯลฯ ฉันแทนที่ชื่อด้วยสิ่งที่มีประโยชน์มากกว่าสำหรับฉันโดยใช้คำสั่ง "c" ฉันไม่ทราบว่าแถว 1 มีป้ายกำกับสำหรับแต่ละคอลัมน์ด้วยและข้อมูลจริงของฉันเริ่มต้นในแถวที่ 2

มีวิธีลบแถว 1 และลดหรือไม่?

คำตอบ:


140

เก็บป้ายกำกับจากไฟล์ต้นฉบับของคุณดังนี้:

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

หากคุณมีคอลัมน์ชื่อ x และ y คุณสามารถระบุได้ดังนี้:

df$x
df$y

หากคุณต้องการลบแถวแรกออกจาก data.frame จริงๆคุณสามารถใช้ดัชนีเชิงลบดังนี้:

df = df[-1,]

หากคุณต้องการลบคอลัมน์ออกจาก data.frame คุณสามารถกำหนดค่า NULL ให้ได้:

df$x = NULL

ตัวอย่างง่ายๆในการสร้างและจัดการ data.frame ใน R:

# 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: ในยืนดังนั้นพารามิเตอร์นี้บอก R เพื่อโหลดส่วนหัว ดูรายละเอียด header=TTTRUE?read.table
daroczig

โปรดทราบว่าหากคุณมีกรอบข้อมูลคอลัมน์เดียวโปรดดูที่คำตอบนี้ - 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()หรือหนึ่งในนั้นคือ Wrapper)


14

แม้ว่าฉันจะเห็นด้วยกับคำตอบที่ได้รับการโหวตมากที่สุด แต่นี่เป็นอีกวิธีหนึ่งในการเก็บแถวทั้งหมดยกเว้นแถวแรก:

dat <- tail(dat, -1)

สิ่งนี้สามารถทำได้โดยใช้dplyrแพ็คเกจของ Hadley Wickham

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

13

คงไม่มีใครอยากลบแถวที่หนึ่งจริงๆ ดังนั้นหากคุณกำลังมองหาสิ่งที่มีความหมายนั่นคือการเลือกตามเงื่อนไข

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

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

นี่คือคำตอบสำหรับคำถามที่ไม่ได้ถาม ฉันคิดว่ามันน่าสับสนมากกว่าการช่วยเหลือ
U. Windl

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.