我正在创建多个数据框,我希望每个数据框中的列与我创建的空白数据框模板中指定的类型相同
例如,我有一个空白模板
template <- data.frame(
char = character(),
int = integer(),
fac1 = factor(levels = c('level1', 'level2', 'level3')),
fac2 = factor(levels = c('level4', 'level5')),
stringsAsFactors = FALSE
)
Run Code Online (Sandbox Code Playgroud)
然后我想创建一些数据帧,但希望保持列的格式为模板(即char为字符,fac2为两个级别'level4'和'level5'的因子)
df1 <- data.frame(
char = c('a', 'b'),
int = c(1,2),
fac1 = c('level2', 'level1'),
fac2 = c('level4', 'level4')
)
df2 <- data.frame(
char = c('c', 'd'),
int = c(3,4),
fac1 = c('level3', 'level4'),
fac2 = c('level5', 'level4')
)
Run Code Online (Sandbox Code Playgroud)
当我创造我可以obviosuly指定列类型df1和df2,但我想避免键入了同样的事情muliple倍,如果例如水平的一个因素改变我只是想改变它在一个地方.
如果在一个不是一个级别的因素中创建了一个值(例如,上面'df2'中'fac1'中的'level 4',那么当转换为正确的格式时,它应该被NA替换
也许您可以只对数据框进行后期处理:
df_template <- function(...) {
df <- data.frame(...)
df$char <- as.character(df$char)
df$int <- as.integer(df$int)
df$fac1 <- factor(df$fac1, levels = c('level1', 'level2', 'level3'))
df$fac2 <- factor(df$fac2, levels = c('level4', 'level5'))
df
}
Run Code Online (Sandbox Code Playgroud)