2010-11-18 97 views
11

在R中是否存在“按行”操作将像这样的向量中的每一行转换为字符串?在R:按行连接向量元素,将向量行转换为字符串

> d= cbind("Data", c("2", "73")) 
> d 
    [,1] [,2] 
[1,] "Data" "2" 
[2,] "Data" "73" 

我想要的是得到的字符串就像

 [,1] 
[1,] "Data 2" 
[2,] "Data 73" 

有一种简单的方式加入由行项目?

回答

18

是的,有。这就是所谓的“应用” ;-)

apply(d,1,paste,collapse=" ") 
[1] "Data 2" "Data 73" 
# convert to matrix using as.matrix to get exactly your solution 

?apply?paste

+0

blarg,当然,适用,杜:(但粘贴,崩溃=“”部分我永远不会想出来,谢谢:) – gakera 2010-11-18 10:20:23

+0

@gakera:找出'collapse =“”'部分是很容易的如果你阅读文档'?paste'。 – 2010-11-18 15:45:37

+0

该帮助不包含collapse =“”用法的任何示例,至少在我的版本中没有。但是从文本中可以清楚地看到它的作用,一旦你在所有的噪音中看到它。 – gakera 2010-11-18 15:50:59

3

?paste快速塔丝后,很明显,是不需要给出的例子apply。如果有几列,这将是方便的。

> paste(d[,1],d[,2]) 
[1] "Data 2" "Data 73" 
+0

但我需要一个通用的方式,没有明确指定行。对不起,我对此并不清楚,但申请方法对我需要做的事情非常有效。 – gakera 2010-11-18 15:58:35

+0

+1:非常真实。 – 2010-11-18 16:13:42

1

一般的方式做到这一点,而不诉诸?apply

do.call(paste, as.data.frame(d)) 
[1] "Data 2" "Data 73" 

as.data.frame来避免标。

编辑:

do.call是一个函数,它接受另一个函数作为第一个参数,和列表作为第二个参数。它通常用于向函数发送参数列表(在我们的例子中,列表dpaste())。我们发送d作为data.frame(一种列表)来使这个技巧发挥作用。

+0

的确如此。如果数据已经是data.frame,效率增益会更大,但apply()解决方案对于矢量来说要快得多。这个优点是在应用粘贴时不需要将自己限制为单一数据类型,但是也存在很多缺点:例如,按行而不是列粘贴只需要在apply()中进行数字更改, '解决方案,而这需要主要的代码更改。总的来说,这个解决方案只适用于我的典型用例,我用'expand.grid()'做了一个索引,并将它们与'do.call(paste)'连接起来, – 2016-03-18 13:37:12

相关问题