根据条件更改列中的值

时间:2019-08-22 12:24:32

标签: r

在某种情况下,我必须在字符向量内部的值的末尾添加特定数量的字符-仅适用于某些列。 每个值必须具有5个字符的固定长度,并且如果当前值小于5个,我必须添加零直到达到最大长度-仅当值的第一个字符为ie时。字母“ A”。

input_vector <- c("ABC", "ZZX", "B", "AILK") 
desirable_output <- c("ABC00", "ZZX", "B", "AILK0") 

我对R世界还很陌生,我只尝试编写像这样的笨拙代码:

example_df<- data.frame(Col1= 1:11, Col2= 2:22, Col3= 3:33, Col4= 6:66)
index_values_of_columns<- c(1, 2, 4)
for (index_value in index_values_of_columns){
  for (value in example_df[[index_value]]){
    firstletter<-str_extract(value, "^.{1}")
    if (!is.na(firstletter) && firstletter == "1"){
      value<-str_pad(value, 5, side="right", pad="0")
    }
  }
}

不幸的是,尽管它不会产生任何错误,但它不会改变数据框中的任何内容。我哪里做错了?

2 个答案:

答案 0 :(得分:2)

尝试

input_vector[substring(input_vector, 1, 1) == 'A'] <- str_pad(input_vector[substring(input_vector, 1, 1) == 'A'], 5, side = "right", pad = "0")
input_vector
#[1] "ABC00" "ZZX"   "B"     "AILK0"

答案 1 :(得分:0)

这是base R

中的解决方案
replace(input_vector,grep("A.",input_vector),strtrim(paste0(input_vector,"00000"),5)[grep("A.",input_vector)])