将高度(5ft6in)的字符变量转换为以英寸为单位的数字变量?

Convert character variable of height (5ft6in) into numeric variable in inches?

我想将我的高度变量从字符类型转换为数字。对于上下文,这样我就可以使用这些值来计算体重指数。

查看下面的示例数据框,我想将 Height_1 转换为 Height_2(其中 Height_2 以英寸为单位):

# Height_1    Height_2
# 5ft6in      66 
# XftXin      XXXX
# XftXin      XXXX 
# XftXin      XXXX
# XftXin      XXXX

我尝试了一些使用“tidyverse”和“measurements”包的方法,但无法创建像上面的 Height_2 这样的变量。例如:

library(dplyr)
library(tidyr)

df %>%
  separate(Height_1,c('feet', 'inches'), sep = 'ft', convert = TRUE, remove = FALSE) %>%
  mutate(Height_2 = 12*feet + inches)

我认为这是因为上面没有解决值末尾有“in”的事实。

您可以使用正则表达式从 Height_1 中提取英尺和英寸数据,然后执行计算。

library(dplyr)
library(tidyr)

df %>%
  extract(Height_1, c('feet', 'inches'), '(\d+)ft(\d+)in', convert = TRUE, remove = FALSE) %>%
  transmute(Height_1, 
            Height_2 = 12*feet + inches)

#  Height_1 Height_2
#1   5ft6in       66
#2   4ft9in       57
#3  5ft12in       72
#4   4ft9in       57
#5   6ft2in       74

在基础 R 中 -

transform(strcapture('(\d+)ft(\d+)in', df$Height_1, 
           proto = list(feet = numeric(), inches = numeric())), 
          Height_2 = 12*feet + inches)

数据

df <- structure(list(Height_1 = c("5ft6in", "4ft9in", "5ft12in", "4ft9in", "6ft2in")), row.names = c(NA, -5L), class = "data.frame")