我有一行字符串,首先由制表符分隔,然后在每列内部子列由^ 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
我无法理解为什么我的拆分声明不起作用
答案 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)