R语言中如何对内置women数据集多列进行单位转换?
解决方法
一、把你的转换函数应用到数据集列上
你已经写好了转换函数,有两种简单的方式把它们用到tibble的列上:
Base R 写法
直接对新列赋值,调用你的函数:
w <- as_tibble(women) in2cm <- function(length) { cm <- length / 2.54 return(cm) } lbs2kg <- function(mass) { kg <- mass * 0.45 return(kg) } # 应用函数生成新列 w$height_cm <- in2cm(w$height) w$weight_kg <- lbs2kg(w$weight)
dplyr 写法(更符合tidyverse风格)
因为你用了as_tibble,推荐用dplyr的mutate函数来添加转换后的列:
library(dplyr) w <- as_tibble(women) in2cm <- function(length) { cm <- length / 2.54 return(cm) } lbs2kg <- function(mass) { kg <- mass * 0.45 return(kg) } # 用mutate批量生成新列 w <- w %>% mutate(height_cm = in2cm(height), weight_kg = lbs2kg(weight))
二、更优的单位转换方法
1. 跳过自定义函数,直接计算(最简洁)
如果只是简单的单位转换,没必要单独写函数,直接在mutate里写转换公式即可,还能减少代码量:
library(dplyr) w <- as_tibble(women) %>% mutate(height_cm = height / 2.54, # 注意:磅转千克的准确系数是0.453592,比你用的0.45更精准 weight_kg = weight * 0.453592)
2. 用units包规范处理单位
如果需要严格管理数据的单位属性,避免转换错误,可以用units包,它能自动处理单位转换,还能保留单位信息:
install.packages("units") # 首次使用先安装 library(units) library(dplyr) w <- as_tibble(women) %>% # 给原始列添加单位属性 mutate(height = set_units(height, inch), weight = set_units(weight, pound)) %>% # 直接转换单位,自动计算系数 mutate(height_cm = set_units(height, cm), weight_kg = set_units(weight, kg))
用这个方法后,列会带有单位标记,后续计算也能自动识别单位,避免出错。
内容的提问来源于stack exchange,提问作者bee
相关产品推荐
相关产品推荐

