R通过函数添加前导零时出错
我正在编写代码,用前导零更新多个数据集的值。我认为在函数中封装代码更容易:R通过函数添加前导零时出错,r,function,dataframe,dplyr,tidyverse,R,Function,Dataframe,Dplyr,Tidyverse,我正在编写代码,用前导零更新多个数据集的值。我认为在函数中封装代码更容易: convert_scs <- function(df, state,county,street) { df$state <- ifelse( nchar(df$state) == 1, paste('0', df$state, sep=''), df$state ) df$county <- ifelse( nchar(df$county) == 1, paste('00',df$count
convert_scs <- function(df, state,county,street) {
df$state <- ifelse( nchar(df$state) == 1, paste('0', df$state, sep=''), df$state )
df$county <- ifelse( nchar(df$county) == 1, paste('00',df$county, sep=''), df$county )
df$county <- ifelse( nchar(df$county) == 2, paste('0', df$county, sep=''), df$county )
df$street <- ifelse( (nchar(df$street) == 3) , paste('000', df$street, sep=''), df$street)
df$street <- ifelse( (nchar(df$street) == 4) , paste('00', df$street, sep=''), df$street)
df$street <- ifelse( (nchar(df$street) == 5) , paste('0', df$street, sep=''), df$street)
return(df)
}
convert_scs(predicted20,STATEFP,COUNTYFP, STREETCE)
需要:
STATEFP(char) COUNTYFP(char) STREETCF(char)
01 001 020100
01 001 010500
01 003 011502
我们可以在函数内部将$替换为[]
convert_scs <- function(df, state,county,street) {
df[[state]] <- ifelse( nchar(df[[state]]) == 1, paste('0', df[[state]], sep=''), df[[state]]
)
df[[county]] <- ifelse( nchar(df[[county]]) == 1, paste('00',df[[county]], sep=''), df[[county]] )
df[[county]] <- ifelse( nchar(df[[county]]) == 2, paste('0',df[[county]] , sep=''),df[[county]] )
df[[street]] <- ifelse( (nchar(df[[street]] ) == 3) , paste('000', df[[street]], sep=''), df[[street]] )
df[[street]] <- ifelse( (nchar( df[[street]] ) == 4) , paste('00', df[[street]] , sep=''), df[[street]] )
df[[street]] <- ifelse( (nchar( df[[street]] ) == 5) , paste('0', df[[street]], sep=''), df[[street]] )
df
}
convert_scs(predicted20,'STATEFP','COUNTYFP', 'STREETCF')
# STATEFP COUNTYFP STREETCF
#1 01 001 020100
#2 01 001 010500
#3 01 003 011502
而且,使用sprintf可以很容易地做到这一点
或者在R底
数据
新错误:functionx中的错误,i,exact if is.matrixi as.matrixx[[i]]else.subset2x,:对象“STATEFP”不是found@lydias您是否有矩阵或data.frame我假设您已经转换为data.frame predicted20我有data.frame。在调用函数的参数周围添加引号后,函数确实运行了,但列值中没有添加前导零…@lydias您能升级吗一个小的可重复的例子。没有数据或Strucutre,它不是clear@lydias如果您有列名,则只需按列名对数据进行子集划分,然后对其进行更新,即nm1
convert_scs <- function(df, state,county,street) {
df[[state]] <- ifelse( nchar(df[[state]]) == 1, paste('0', df[[state]], sep=''), df[[state]]
)
df[[county]] <- ifelse( nchar(df[[county]]) == 1, paste('00',df[[county]], sep=''), df[[county]] )
df[[county]] <- ifelse( nchar(df[[county]]) == 2, paste('0',df[[county]] , sep=''),df[[county]] )
df[[street]] <- ifelse( (nchar(df[[street]] ) == 3) , paste('000', df[[street]], sep=''), df[[street]] )
df[[street]] <- ifelse( (nchar( df[[street]] ) == 4) , paste('00', df[[street]] , sep=''), df[[street]] )
df[[street]] <- ifelse( (nchar( df[[street]] ) == 5) , paste('0', df[[street]], sep=''), df[[street]] )
df
}
convert_scs(predicted20,'STATEFP','COUNTYFP', 'STREETCF')
# STATEFP COUNTYFP STREETCF
#1 01 001 020100
#2 01 001 010500
#3 01 003 011502
library(purrr)
library(dplyr)
predicted20 %>%
map2_df(., c("%02d", "%03d", "%06d"), ~ sprintf(fmt = .y, .x))
predicted20[] <- Map(sprintf, predicted20, fmt = c("%02d", "%03d", "%06d"))
predicted20 <- structure(list(STATEFP = c(1L, 1L, 1L), COUNTYFP = c(1L, 1L,
3L), STREETCF = c(20100L, 10500L, 11502L)), class = "data.frame", row.names = c(NA,
-3L))