将高度(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")
我想将我的高度变量从字符类型转换为数字。对于上下文,这样我就可以使用这些值来计算体重指数。
查看下面的示例数据框,我想将 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")