如何在保留原列的同时对R数据框指定列应用函数
解决R数据框中avg_price列向上取整并修改数据框的问题
原始数据集
group_by_dn <- structure(list(designer_name = c("A Quaint Stitch", "AllSewPetite", "American Stitchers", "Amy Butler"), avg_price = c(7.11818181818182, 2.785, 11.4736842105263, 11.0454545454545)), row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame"))
你之前代码的问题
ceiling(as.integer(group_by_dn$avg_price))存在两个关键问题:
as.integer()会直接截断小数部分(比如7.118变成7,2.785变成2),后续的ceiling()完全失去了向上取整的作用;- 代码仅计算了结果,但未将计算值赋值回数据框的对应列,因此原数据框不会被修改。
正确解决方法
方法1:基础R直接赋值
直接对avg_price列重新赋值,去掉多余的as.integer(),直接使用ceiling()处理原始小数:
group_by_dn$avg_price <- ceiling(group_by_dn$avg_price)
执行后查看修改结果:
group_by_dn
输出结果:
# A tibble: 4 × 2 designer_name avg_price <chr> <dbl> 1 A Quaint Stitch 8 2 AllSewPetite 3 3 American Stitchers 12 4 Amy Butler 12
方法2:用dplyr包的mutate函数(适合tidyverse workflow)
如果习惯使用tidyverse工具链,可以用mutate()直接修改列并更新数据框:
library(dplyr) group_by_dn <- group_by_dn %>% mutate(avg_price = ceiling(avg_price))
内容的提问来源于stack exchange,提问作者DivergentStitches
相关产品推荐
相关产品推荐

