R语言中列表内dataframe设置小数位数时如何排除第一列
R语言处理DataFrame列表时排除第一列的修改方案
问题原因
原代码直接将完整DataFrame传入舍入函数,函数默认对所有列生效,导致存储序号的第一列Determination_No也被应用了舍入格式化规则。
修改方案
只需调整dataDecimal函数的内部逻辑,拆分第一列和数值列分别处理即可,完整修改后的代码如下:
AnalyteDecList <- c("Al2O3", "As", "Ba") decimlist <- data.frame(analytes = AnalyteDecList, value.dec = c(2,3,3), sd.Dec = c(3,4,4)) # 修改后的舍入函数 dataDecimal <- function(df, value.dec, ...){ # 单独保留第一列,不做任何处理 first_col <- df[, 1, drop = FALSE] # 仅对除第一列外的数值列应用舍入+格式化规则 process_cols <- lapply(df[, -1, drop = FALSE], function(col) { format(round(col, digits = value.dec), nsmall = value.dec) }) # 合并为原结构的DataFrame返回 return(cbind(first_col, process_cols)) } # 原Map调用无需修改 df <- Map(dataDecimal, df[decimlist$analytes], decimlist$value.dec)
说明
- 参数
drop = FALSE用于避免单列数据被自动转为向量,保证数据结构始终为DataFrame,合并后和原列表的结构完全一致 - 第一列的序号值会完全保留原始状态,仅后续的数值测定列会按指定的小数位数进行舍入格式化
内容的提问来源于stack exchange,提问作者Spooked
相关产品推荐
相关产品推荐

