我有一个数据框,其中包含一列标识符代码。代码以0结尾的地方,我想将其替换为1。
经过大量的试验和错误,我有了一个for循环,该循环几乎可以正常工作。当只有一个代码以0结尾并且位于数据帧的最后一行时,它才起作用。如果还有另一行数据,则for循环不会产生所需的输出。
library(stringr)
df_a <- data.frame(a = c("02.1.1", "02.1.1.0"))
df_b <- data.frame(a = c("02.1.1", "02.1.1.0", "02.1.2"))
for (i in nrow(df_a)){
df_a$adj <- ""
df_a$code_adj <- ""
if (str_sub(df_a[i, "a"], -1, -1) == "0"){
df_a[i, "adj"] <- "1"
df_a[i, "code_adj"] <- paste0(str_sub(df_a[i, "a"], 1, -2), df_a[i, "adj"])
}
}
当我在数据帧df_a上运行for循环时,它将产生所需的结果。当我在df_b上运行它时,它不是。
我对解决这个问题的更好方法持开放态度,但我也想知道为什么for循环在不同的数据帧上表现得如此。
我们可以使用创建一个函数,sub
然后在多个数据集上重复使用它。匹配$
字符串末尾()的0,并用1替换数据集中的特定列,更新该列并返回数据集
f1 <- function(dat, colNm) {
dat[[colNm]] <- sub("0$", "1", dat[[colNm]])
dat
}
f1(df_a, "a")
# a
#1 02.1.1
#2 02.1.1.1
f1(df_b, "a")
# a
#1 02.1.1
#2 02.1.1.1
#3 02.1.2
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句