我有一个数据集,包含11列,每列都有超过1000行数据。这些列的标签是V1、V2、V11等等。 我使用“c”命令将这些标签替换为更有用的名称。 但我没有意识到第一行也包含了每列的标签,而我的实际数据从第二行开始。
有没有办法删除第一行并减少行数?
df = read.table('data.txt', header = T)
df$x
df$y
df = df[-1,]
如果您想从数据框中删除一列,可以将其赋值为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
你可以使用负索引来删除行,例如:
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
话虽如此,你可能不仅需要删除在第一行的标签。更有可能的是,R已将数据解释为文本,然后转换为因子。检查str(foo)
,其中foo
是您的数据对象,了解数据类型。
听起来您只需要在读取数据时的调用中添加header = TRUE
(假设您是通过read.table()
或其包装之一来读取数据的)。
虽然我同意得到最多票数的答案,这里还有另一种方法来保留除第一行之外的所有行:
dat <- tail(dat, -1)
这也可以通过使用Hadley Wickham的 dplyr
软件包来实现。
dat <- dat %>% slice(-1)
大概没有人真的想删除第一行。因此,如果您正在寻找有意义的内容,那就是条件选择。
#remove rows that have long length and "0" value for vector E
>> setNew<-set[!(set$length=="long" & set$E==0),]
我不是专家,但这个方案也可能行得通。
dat <- dat[2:nrow(dat), ]
nrow(dat) == 1
时,这并不起作用:原始 dat 将被保留。 - U. Windldat <- dat[-1, ]
可以实现,但会破坏数据框架的格式,并将其转化为其他类型。因此必须使用 dat <- data.frame(dat[-1, ])
来避免这种情况,但这可能是一个特殊情况,因为该数据框架最初只有一列。
header=T
中,T
代表TRUE
,因此该参数告诉R加载标题。有关详细信息,请参见?read.table
。 - daroczig