R按制表符或非打印字符分割字符串

时间:2013-10-11 17:30:57

标签: r split

我有一行字符串,首先由制表符分隔,然后在每列内部子列由^ A分隔。 任何人都知道如何在R中这样做。

我甚至没能在第一步用'tab'拆分行,我的代码在下面,我使用Rscript从stdin读取:

#!/usr/bin/Rscript

input = file('stdin', 'r')

while(length(row<-readLines(input, n=1))>0){
    fields = strsplit(row, '\t')
    key = fields[1]
    value = fields[2]
    write(length(fields), stdout())
}

然后我运行我的代码:

$ cat input | ./reducer.R 
1
1
1

我的输入看起来像是制表符分隔的:

1        2
3        4
5        6 

我无法理解为什么我的拆分声明不起作用

2 个答案:

答案 0 :(得分:2)

没有你的意见很难说,但你可能想要:

key = fields[[1]][[1]]
value = fields[[1]][[2]]

如果上述情况有效,可能会出现以下情况:

fields = strsplit(row, '\t') [[1]]
key = fields[1]
value = fields[2]

strsplit返回一个列表(非常适用于矢量化操作,但是当不期望列表输出时为gotcha

答案 1 :(得分:1)

您根本不需要循环或strsplit()

f <- read.delim(stdin(), sep="\t", header=FALSE)
names(f) <- c("key", "value")

f现在是一个包含两列的数据框,即您的键和值。

如果您想在某处写,请使用write.table

write.table(f, stdout(), sep="\t", row.names=FALSE)