【问题标题】:How to paste a string on each element of a vector of strings using apply in R?如何在 R 中使用 apply 将字符串粘贴到字符串向量的每个元素上?
【发布时间】:2011-10-22 12:34:27
【问题描述】:

我有一个字符串向量。

d <- c("Mon","Tues","Wednes","Thurs","Fri","Satur","Sun")

我想以与此类似的方式将字符串“day”粘贴到向量的每个元素上。

week <- apply(d, "day", paste, sep='')

【问题讨论】:

    标签: r paste apply


    【解决方案1】:

    不需要apply(),直接使用paste()即可:

    R> d <- c("Mon","Tues","Wednes","Thurs","Fri","Satur","Sun")
    R> week <- paste(d, "day", sep="")
    R> week
    [1] "Monday"    "Tuesday"   "Wednesday" "Thursday"  
    [4] "Friday"    "Saturday"  "Sunday"   
    R> 
    

    【讨论】:

    • 短格式:week &lt;- paste0(d, "day")
    • 当然。但是请考虑到paste0()在六年前我写答案时存在的事实。
    【解决方案2】:

    其他人已经表示,由于paste是矢量化的,在这种情况下不需要使用apply

    但是,要回答您的问题:apply 用于数组或 data.frame。当您想在列表(或向量)上应用函数时,请使用 lapplysapplylapply 的变体,简化结果):

    sapply(d, paste, "day", sep="")
            Mon        Tues      Wednes       Thurs         Fri       Satur 
       "Monday"   "Tuesday" "Wednesday"  "Thursday"    "Friday"  "Saturday" 
            Sun 
       "Sunday" 
    

    【讨论】:

    • @pedrosaurio 我必须指出,如果你使用sapply 来解决这个特定问题,效率会非常低。正如@DirkEddelbuettel 建议的那样,使用paste 的已矢量化形式。
    • @DirkEddelbuettel 谢谢,起初我有点困惑,我应该将哪个答案打勾为好答案。由于安德烈的答案是“真正的”答案,我认为它应该被选为好的答案,但如果它是一种错误的方法,它会给将来的参考造成混淆,我会改变它。再次感谢
    【解决方案3】:

    除了paste/paste0,我们可以通过多种方式将字符串添加到向量中的每个元素。

    1) 使用sprintf

    sprintf("%sday", d)
    #[1] "Monday"    "Tuesday" "Wednesday" "Thursday"  "Friday"  "Saturday"  "Sunday" 
    

    2) glue

    glue::glue("{d}days")
    

    这里 {d} 被评估为 R 代码。如果需要,可以将其包裹在 as.character 中。

    3) str_c in stringr

    stringr::str_c(d, "day")
    

    其等价物是

    4) stri_c in stringi

    stringi::stri_c(d, "day")
    

    5) stringi 也有 stri_paste

    stringi::stri_paste(d, "day")
    

    【讨论】:

      猜你喜欢
      • 2020-01-07
      • 2022-10-20
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      相关资源
      最近更新 更多