我有一个数据帧:dat如下
CODE GROUP SET
1 100 6000 20.3
2 100 7000 30.1
3 DEF 8000 120
我正在使用下面的语句格式化以便插入XML:
sprintf("<rows>%s</rows>", paste(apply(dat, 1, function(x) {
paste("<row>", paste(x, collapse="|"), "</row>", sep="")
}), collapse=""))
<rows><row>100|6000| 20.3</row><row>100|6000| 30.1</row><row>DEF|8000| 120</row><row>
问题是第三列用空格填充。我认为这与sprintf中的%s有关。我有什么想法可以阻止它或剥离空间吗?
答案 0 :(得分:1)
我使用
剥离了空格gsub(" ","",a, fixed=TRUE)
答案 1 :(得分:1)
因为apply
在as.matrix
上调用dat
以及as.matrix.data.frame
方法如何将data.frame转换为字符矩阵,因此空格存在。更简单的解决方案是在您的data.frame而不是do.call
上使用apply
。
dat <- structure(list(CODE = structure(c(1L, 1L, 2L), .Label = c("100",
"DEF"), class = "factor"), GROUP = c(6000L, 7000L, 8000L), SET = c(20.3,
30.1, 120)), .Names = c("CODE", "GROUP", "SET"), class = "data.frame",
row.names = c("1", "2", "3"))
# paste all the rows of dat together
datRows <- do.call(paste, c(dat, sep="|"))
# add </row> [something]ML tags
Row <- paste0("<row>", datRows, "</row>", collapse="")
# add </rows> tags
Rows <- sprintf("<rows>%s</rows>", Row)