【发布时间】:2017-03-13 03:41:54
【问题描述】:
我想将下面的函数应用于数据框的变量名称。但是为了这个问题,我将使用向量代替(因为 names(df) 也是向量)。
我想首先,(1)将向量元素中的所有字符转换为大写,然后,(2)用“_”替换所有中间空格,最后,(3)将特定字符填充到向量中每个元素的结尾。这是我写的函数:
pad <- function(vec,pastechr){
names(vec) <- names(vec) %>%
toupper() %>%
str_replace_all(" ", "_") %>%
if_else(pastechr!="",paste(pastechr,sep="_"),paste0(""))
}
我想将此函数应用于 3 个向量:
vec1 <- c("A","B B","C c")
vec2 <- c("PP p","Q Q","r")
vec3 <- c("x","y z")
这样,我会将“123”粘贴到 vec1,将“456”粘贴到元素末尾的 vec2。我不想将任何内容粘贴到 vec3。因此,
pad(vec1,"123")
pad(vec2,"456")
pad(vec3,"")
我想要的是:
pad(vec1,"123")
[1] "A_123","B_B_123","C_C_123"
pad(vec2,"456")
[1] "PP_P_456","Q_Q_456","R_456"
pad(vec3,"")
[1] "X","Y_Z"
我得到了一个错误:
错误:
condition必须是逻辑的
我相信它一定与if_else这一行有关,所以我尝试了:
if(pastechr!="") {paste(pastechr,sep="_")}
和
if_else(pastechr=="",paste0(""),paste(pastechr,sep="_"))
但他们不会工作。有什么建议吗?谢谢。
【问题讨论】: