如何在 R 中使用 apply 将字符串粘贴到字符串向量的每个元素上?
Posted
技术标签:
【中文标题】如何在 R 中使用 apply 将字符串粘贴到字符串向量的每个元素上?【英文标题】:How to paste a string on each element of a vector of strings using apply in R? 【发布时间】:2011-10-22 12:34:27 【问题描述】:我有一个字符串向量。
d <- c("Mon","Tues","Wednes","Thurs","Fri","Satur","Sun")
我想以与此类似的方式将字符串“day”粘贴到向量的每个元素上。
week <- apply(d, "day", paste, sep='')
【问题讨论】:
【参考方案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 <- paste0(d, "day")
当然。但是请考虑到paste0()
在六年前我写答案时不存在的事实。【参考方案2】:
其他人已经表示,由于paste
是矢量化的,在这种情况下不需要使用apply
。
但是,要回答您的问题:apply
用于数组或 data.frame。当您想在列表(或向量)上应用函数时,请使用 lapply
或 sapply
(lapply
的变体,简化结果):
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("ddays")
这里 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")
【讨论】:
以上是关于如何在 R 中使用 apply 将字符串粘贴到字符串向量的每个元素上?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 R 中使用“粘贴”函数时字符串之间有空格?我使用了分隔符[重复]