我有一个矢量调用ID如下:
id<-c("US_01_01", "US_01_02", "US_01_03", "UK_02_01", "UK_02_02", "UK_02_03", "CA_03_01", "CA_03_02", "CA_03_03")
我希望将输出以下面的格式保存到名为obj的对象中:
US 01 01
US 01 02
US 01 03
UK 02 01
UK 02 02
UK 02 03
CA 03 01
CA 03 02
CA 03 03
以下是我的代码:
sp<-strsplit(id,"_")
sp<-as.array(sp)
obj<-vector("list",dim(sp))
for (i in 1:dim(sp)){
obj[[i]] <- cat(sprintf("%s %s %s\n", sp[[i]][1], sp[[i]][2], sp[[i]][3]))
}
但是,我不知道为什么输出无法保存到对象obj中。
谢谢你的帮助!
答案 0 :(得分:2)
cat
没有返回值。摆脱它......
for (i in 1:dim(sp)){
obj[[i]] <- sprintf("%s %s %s\n", sp[[i]][1], sp[[i]][2], sp[[i]][3])
}
现在我们可以将这些项目连在一起:
obj_full <- do.call(paste0,obj)
你可以随时cat
:
cat(obj_full)
# US 01 01
# US 01 02
# US 01 03
# UK 02 01
# UK 02 02
# UK 02 03
# CA 03 01
# CA 03 02
# CA 03 03
当然,如果您想在循环期间cat
,也可以为此添加另一行。
查找文档。&#34;价值&#34;帮助页面上的部分?cat
解释说它什么都不返回。这部分有时会被省略,所以它也值得回顾一下&#34;描述&#34;部分。
答案 1 :(得分:2)
尝试 read.table(text=id, sep='_', colClasses=rep('character',3))
# V1 V2 V3
#1 US 01 01
#2 US 01 02
#3 US 01 03
#4 UK 02 01
#5 UK 02 02
#6 UK 02 03
#7 CA 03 01
#8 CA 03 02
#9 CA 03 03
library(splitstackshape)
cSplit(as.data.frame(id), 'id', sep='_', type.convert=FALSE)
或者
{{1}}
答案 2 :(得分:1)
试试这个:
matrix(sapply(strsplit(id,"_"),paste,collapse=" "),ncol=1)
#output
[,1]
[1,] "US 01 01"
[2,] "US 01 02"
[3,] "US 01 03"
[4,] "UK 02 01"
[5,] "UK 02 02"
[6,] "UK 02 03"
[7,] "CA 03 01"
[8,] "CA 03 02"
[9,] "CA 03 03"