【问题标题】:Skip random rows from a table从表中跳过随机行
【发布时间】:2022-01-27 23:29:39
【问题描述】:

我有一个表,其第 2 行有列标题,实际数据从第 5 行开始。我的问题是如何读取跳过第 1、3 和 4 行的表并将第 2 行指定为列标题? 我正在使用类似下面的东西。但是,想了解是否有更好的方法。

headers <- read.table("file_1", skip=1, header=F, sep =',', nrows=1, as.is=T)
df <- read.table("file_1", skip=3, header=F, sep =',')
colnames(df) <- headers

【问题讨论】:

  • 您所拥有的可能是使用 base R 可以做到的最好的。其他软件包可能会提供更大的灵活性,但看一下 data.table::freadreadr::read_table 文档都会让它们看起来像期望 skip 是一个整数。
  • 如果您要跳过的所有行都以某个字符开头,那么您可以使用该字符...
  • 谢谢@GregorThomas

标签: r rows skip


【解决方案1】:

差别不大,但您可以scan 标题行和read.table 其余部分。

你可能正面临这样的事情。

tb <- ' 1   1  1  1  1  1  1  1  1  1   1
2  X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
3   3  3  3  3  3  3  3  3  3   3
4   4  4  4  4  4  4  4  4  4   4
5   5  5  5  5  5  5  5  5  5   5
6   6  6  6  6  6  6  6  6  6   6
7   7  7  7  7  7  7  7  7  7   7
8   8  8  8  8  8  8  8  8  8   8
9   9  9  9  9  9  9  9  9  9   9
10 10 10 10 10 10 10 10 10 10  10'

scan你的文件,状态what=character(),有多少行skipped和nlines要读入列名r1。对于数据r2read.tableskip=,所有不需要的东西。每个跳过第一个元素,因为它是索引。最后使用r1setNamesr2type.convert

r1 <- scan(text=tb, what=character(), skip=1, nlines=1)[-1]
r2 <- read.table(text=tb, skip=4)[-1]

res <- r2 |> 
  setNames(r1) |>
  type.convert(as.is=TRUE)

res
#   X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
# 1  5  5  5  5  5  5  5  5  5   5
# 2  6  6  6  6  6  6  6  6  6   6
# 3  7  7  7  7  7  7  7  7  7   7
# 4  8  8  8  8  8  8  8  8  8   8
# 5  9  9  9  9  9  9  9  9  9   9
# 6 10 10 10 10 10 10 10 10 10  10

注意:这在一定程度上取决于数据在文件中的存储方式,您可能需要自定义skip=

【讨论】:

  • 谢谢@jay.sf。确实很有用。
猜你喜欢
  • 2016-12-25
  • 1970-01-01
  • 2013-07-12
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多