我有一个数据集,其中有11列,每列超过1000行。这些列标记为V1,V2,V11等。我使用“ c”命令将其替换为对我更有用的名称。我没有意识到第1行也为每列包含标签,而我的实际数据从第2行开始。
有没有办法删除第1行并递减?
Answers:
像这样保留原始文件中的标签:
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
drop = FALSE
以及当负索引
您可以使用负索引删除行,例如:
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()
或其中一个包装器读取了数据)。
没有人可能真的想删除第一行。因此,如果您正在寻找有意义的东西,那就是条件选择
#remove rows that have long length and "0" value for vector E
>> setNew<-set[!(set$length=="long" & set$E==0),]
dat <- dat[-1, ]
工作,但它杀死了我的数据框,将其更改为另一种类型。不得不改为使用,
dat <- data.frame(dat[-1, ])
但这可能是一种特殊情况,因为此数据帧最初只有一列。
header=T
的T
代表TRUE
,所以这个参数告诉R若要装入头。有关?read.table
详细信息,请参见。