【问题标题】:How to remove spaces from a fixed-width text file in R如何从R中的固定宽度文本文件中删除空格
【发布时间】:2018-03-19 15:00:35
【问题描述】:

我想将如下所示的文本文件加载到 R 中,删除所有空格,然后重写文件。

1 061
061 1
0 081
080 1
0 061
060 1
1 051
051 1
0 101
100 1

我要解决这个问题的方法是使用 readlines(),删除每行中的空格,然后重写。

这是最好的方法吗?

这个问题与仅仅询问如何从字符串中删除空格不同,因为它涉及以可预测的模式作为行框架的数据。

【问题讨论】:

标签: r text spaces fixed-width


【解决方案1】:

我不确定您删除空格的确切含义,但如果数据采用您描述的格式,那么read.table 可以轻松读取。

> tbl <- read.table(text = "
    1 061
    061 1
    0 081
    080 1
    0 061
    060 1
    1 051
    051 1
    0 101
    100 1
")
> tbl
    V1  V2
1    1  61
2   61   1
3    0  81
4   80   1
5    0  61
6   60   1
7    1  51
8   51   1
9    0 101
10 100   1

如果你想合并列以便得到没有空格的字符串,你只需这样做

> no_space <- apply(tbl, 1, function(row) paste0(row, collapse = ""))
> no_space
 [1] "161"  "611"  "081"  "801"  "061"  "601"  "151"  "511" 
 [9] "0101" "1001"

如果您想要更好的格式,cat 可以为您完成。

> cat(paste0(no_space, collapse = "\n"))
161
611
081
801
061
601
151
511
0101
1001

您可以使用catfile 参数将其写入文件。

【讨论】:

  • 这看起来不错,但正在删除零。有什么办法保存吗?
  • 绝对。添加colClasses = c("character", "character") 作为read.table 的选项。这将阻止 R 将输入解释为数字,并且由于我们无论如何都希望将其作为字符串,所以其余的都可以工作。
  • 如果速度很重要,请使用 do.call 而不是 apply。效率更高。
  • 如何使用do.call 对表的所有行应用函数?我没有看到用do.call 替换apply 的明显方法...
  • 您可以与 paste0 一起使用。 df &lt;- do.call(paste0, df)@ThomasMailund
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
  • 2012-08-16
  • 2014-02-22
  • 1970-01-01
相关资源
最近更新 更多