【问题标题】:In R: Joining vector elements by row, converting vector rows to strings在R中:按行连接向量元素,将向量行转换为字符串
【发布时间】:2010-11-18 10:11:27
【问题描述】:

R 中是否有“按行”操作将这样的向量中的每一行转换为字符串?

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

我想要的是得到像

这样的字符串
     [,1]
[1,] "Data 2"
[2,] "Data 73"

有没有一种简单的方法可以按行加入项目?

【问题讨论】:

    标签: r


    【解决方案1】:

    是的,有。它被称为“应用”;-)

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

    见?apply和?paste

    【讨论】:

    • blarg,当然是申请,呵呵 :( 但是粘贴,collapse= " " 部分我永远也想不通,谢谢 :)
    • @gakera:如果您阅读文档?paste,找出collapse=" " 部分非常容易。
    • 帮助不包括任何 collapse=" " 用法的例子,至少在我的版本中没有。但是从文本中可以清楚地看出它的作用,一旦你在所有的噪音中看到它。
    • @gakera: tss tss tss...这不是噪音,实际上是非常有价值的信息。在某个时候,您会对“噪音”感到非常满意。
    • 呵呵,我喜欢人们捍卫 R 帮助的速度之快,就像每个人的宝贝一样。很好,我很感激我能得到的所有帮助。是的,SO 享有很好的声誉,是快速获得答案的好地方,而且通常不会失败。当涉及到这种事情时,我并不为有点懒惰而感到羞耻。我让你来定义“小”是什么意思,我相信你会喜欢的。
    【解决方案2】:

    不诉诸?apply的一般方法:

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

    其中as.data.frame 用于避免下标。

    编辑:

    do.call 是一个函数,它将另一个函数作为第一个参数,将一个列表作为第二个参数。它通常用于向函数发送参数列表(在我们的例子中,d 到 paste() 的列)。我们将 d 作为 data.frame(一种列表)发送,以使这个技巧起作用。

    【讨论】:

    • 确实如此。如果数据已经是 data.frame,效率增益会更大,但 apply() 解决方案对于向量来说要快得多。这样做的好处是在应用粘贴的时候不需要将自己限制为单一的数据类型,但是也有很多缺点:比如按行粘贴而不是按列粘贴只需要在apply()解决方案中改变一个数字,而这需要重大的代码更改。总的来说,这个解决方案只适用于我的典型用例,我用expand.grid() 做了一个索引,然后用do.call(paste) 连接它们
    【解决方案3】:

    快速浏览?paste 后,很明显,给出的示例不需要apply。不过如果有几列会很方便。

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

    【讨论】:

    • 但我需要一种无需明确指定行的通用方法。抱歉,我对此不够清楚,但 apply 方法非常适合我需要做的事情。
    猜你喜欢
    • 2012-12-08
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    相关资源
    最近更新 更多