如何删除R中数据帧的第一行?

akz*_*akz 77 r dataset

我有一个包含11列的数据集,每列超过1000行.列标记为V1,V2,V11等.我使用"c"命令将名称替换为对我更有用的名称.我没有意识到第1行还包含每列的标签,我的实际数据从第2行开始.

有没有办法删除第1行并减少?

Jam*_*son 133

保留原始文件中的标签,如下所示:

df = read.table('data.txt', header = T)
Run Code Online (Sandbox Code Playgroud)

如果您有名为x和y的列,则可以像这样解决它们:

df$x
df$y
Run Code Online (Sandbox Code Playgroud)

如果您想实际删除data.frame中的第一行,可以使用如下的负数索引:

df = df[-1,]
Run Code Online (Sandbox Code Playgroud)

如果您想从data.frame中删除列,可以为其指定NULL:

df$x = NULL
Run Code Online (Sandbox Code Playgroud)

以下是如何在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
Run Code Online (Sandbox Code Playgroud)

  • 我不确定@akz是否清楚:在`header = T`中``T`代表`TRUE`,所以这个参数告诉R加载标题.有关详细信息,请参阅"?read.table". (3认同)

Rei*_*son 26

您可以使用负索引来删除行,例如:

dat <- dat[-1, ]
Run Code Online (Sandbox Code Playgroud)

这是一个例子:

> 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
Run Code Online (Sandbox Code Playgroud)

也就是说,您可能遇到的问题不仅仅是删除最终排在第1行的标签.R更有可能将数据解释为文本,然后转换为因子.检查什么str(foo),哪里foo是你的数据对象,说,有关的数据类型.

听起来你只需要header = TRUE在调用中读取数据(假设你在via read.table()或其中一个包装器中读取它.)


小智 12

没有人可能真的想要删除第一行.因此,如果您正在寻找有意义的东西,那就是条件选择

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

>> setNew<-set[!(set$length=="long" & set$E==0),]
Run Code Online (Sandbox Code Playgroud)


car*_*mom 5

dat <- dat[-1, ]工作但它杀死了我的数据帧,将其更改为另一种类型.不得不使用, dat <- data.frame(dat[-1, ])但这可能是一个特例,因为这个数据框最初只有一列.


bim*_*bim 5

我不是专家,但这可能也有效,

dat <- dat[2:nrow(dat), ]
Run Code Online (Sandbox Code Playgroud)


小智 5

虽然我同意投票最多的答案,但这是保留除第一行以外的所有行的另一种方法:

dat <- tail(dat, -1)
Run Code Online (Sandbox Code Playgroud)

这也可以使用Hadley Wickham的dplyr软件包来完成。

dat <- dat %>% slice(-1)
Run Code Online (Sandbox Code Playgroud)