r-如何运行创建新列的循环



我有一个数据集,其中的列包含代码+名称的信息,我想将其分为两列。所以,举个例子:

E5000_A列包含类似于`0080002的值。ALB-民主党'在一个单元格中,我想要两列,一列包含代码0080002,另一列包含其他信息。

我还有8列的值非常相似(E5000_A到E5000_H(。这是我正在写的代码。

cols2 <- c("E5000_A" , "E5000_B" , "E5000_C" , "E5000_D" , 
"E5000_E" , "E5000_F" , "E5000_G" , "E5000_H" )
for(i in cols2){
cses_imd_m <- cses_imd_m %>% mutate(substr(i, 1L, 7L))  
}

但由于某种原因,它只为E5000_a生成了一个新列,循环不会转到其他变量。我做错了什么?如果您需要有关代码或数据框架的更多详细信息,请告诉我。

data.frame进近

# to extract codes
df %>% 
mutate_at(.vars = vars(c("E5000_A", "E5000_B", "E5000_C", "E5000_D", "E5000_E", 
"E5000_F", "E5000_G", "E5000_H")), 
.funs = function(x) str_extract("^\d+", x)) 

您也可以在mutate()中使用across()

如果您想使用for环路

col_names <- c("E5000_A", "E5000_B", "E5000_C", "E5000_D", "E5000_E", "E5000_F", "E5000_G", "E5000_H")
for (i in col_names) {

df[,sprintf("code_%s", i)] <- str_extract("^\d+", df[,i])
df[,sprintf("party_%s", i)] <- gsub(".*\.", "", df[,i]) %>% str_trim() # remove all before dot (.)

}