R - 使用双引号将行提取为字符串

时间:2015-06-04 15:20:11

标签: r dataframe character

我有一个名为dataf的数据框

dataf<-data.frame(replicate(10,sample(0:1,10,rep=TRUE)))

我希望将此数据框的每一行都提取为与此函数类似的字符串:

result=data.frame(matrix(NA, ncol=1, nrow=10))

i=0
for(i in 0:9)
{
  result[i+1,]=toString(dataf[i+1,])
}

但结果不符合预期:

1, 0, 0, 0, 1, 0, 0, 1, 1, 0
0, 0, 0, 1, 1, 1, 1, 0, 1, 1
1, 1, 0, 0, 0, 0, 0, 0, 1, 0

我想这样:

"1","0","0","0","1","0","0","1","1","0"
"0","0","0","1","1","1","1","0","1","1"
"1","1","0","0","0","0","0","0","1","0"

我已尝试使用dQuote\"R\"collapsesep ...但我无法获得所需内容。

4 个答案:

答案 0 :(得分:3)

尝试:capture.output(write.table(lapply(dataf, as.character), row.names=F, col.names=F, sep=","))

 [1] "\"0\",\"0\",\"0\",\"0\",\"1\",\"1\",\"1\",\"1\",\"1\",\"1\""
 [2] "\"1\",\"0\",\"1\",\"0\",\"0\",\"0\",\"1\",\"0\",\"1\",\"1\""
 [3] "\"0\",\"1\",\"0\",\"0\",\"1\",\"1\",\"0\",\"0\",\"1\",\"1\""
...

编辑以回应Matthew在下面的评论

答案 1 :(得分:2)

这是另一种选择,类似于@ Phil的方法,但提供与@JayBlack相同的输出。

apply(dataf, 1, function(.) paste(dQuote(.), collapse=','))

返回以下字符串向量。

 [1] "\"0\",\"0\",\"1\",\"0\",\"1\",\"1\",\"0\",\"0\",\"1\",\"1\""
 [2] "\"1\",\"0\",\"1\",\"1\",\"1\",\"0\",\"0\",\"0\",\"1\",\"0\""
 [3] "\"1\",\"1\",\"0\",\"1\",\"0\",\"0\",\"1\",\"1\",\"1\",\"1\""
 .....

答案 2 :(得分:1)

[编辑]

这是一种方式:

d <- apply(dataf, 1, toString)
splitup <- lapply(d, function(x) paste('\"', unlist(strsplit(x, ',')), ',\"', sep=''))

data.frame(do.call(rbind, splitup))
     X1    X2    X3    X4    X5    X6    X7    X8    X9
1  "1," " 0," " 0," " 1," " 1," " 0," " 1," " 0," " 1,"
2  "1," " 0," " 1," " 1," " 0," " 1," " 0," " 0," " 0,"
3  "0," " 0," " 1," " 0," " 1," " 0," " 1," " 0," " 0,"
4  "0," " 1," " 1," " 1," " 0," " 0," " 1," " 1," " 1,"
5  "1," " 0," " 1," " 0," " 0," " 1," " 0," " 1," " 1,"
6  "1," " 0," " 1," " 1," " 0," " 0," " 0," " 1," " 0,"
7  "1," " 0," " 1," " 0," " 0," " 1," " 1," " 1," " 1,"
8  "0," " 1," " 0," " 1," " 0," " 1," " 0," " 1," " 1,"
9  "1," " 1," " 1," " 0," " 0," " 1," " 0," " 1," " 0,"
10 "0," " 0," " 0," " 0," " 0," " 1," " 0," " 0," " 1,"

答案 3 :(得分:0)

编辑:不是您指定的输出但可能对其他人有用吗?

<MENSAJEREQ>
        <INTEGREQ>
           <DETALLE>
              <DATOS>
                 <!--Optional:-->
                 <!--xs:string-->
                 <numServicio>?</numServicio>
                 <!--xs:string-->
                 <tipNegocio>?</tipNegocio>
                 <!--xs:int-->
                 <mtoDeudor>?</mtoDeudor>
              </DATOS>
           </DETALLE>
        </INTEGREQ>
     </MENSAJEREQ>

收率:

apply(dataf, 1, paste0, collapse = "")

这是你希望的输出吗?