1

我有一行字符串,首先由制表符分隔,然后在每列内的子列由 ^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 

我只是不明白为什么我的拆分语句不起作用

4

2 回答 2

3

没有您的输入很难说,但您可能想要:

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

如果上述方法有效,那么以下情况也很可能:

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

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

于 2013-10-11T17:37:17.370 回答
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)
于 2013-10-11T19:20:24.730 回答