Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R通过函数添加前导零时出错_R_Function_Dataframe_Dplyr_Tidyverse - Fatal编程技术网

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))