我怎样才能有条件地从预先存在的变量中计算出一个新变量?
How can I conditionally calculate a new variable from pre-existing variables?
我是一名编程新手,试图从包含身高、性别和实际体重的大型数据集中计算一些理想体重数据。我想根据每个人的理想体重计算在数据框 (df$ibw) 中创建一个新列。
男性和女性的理想体重 (IBW) 计算方式不同。
For males... IBW = 50 + 0.91((Height in cm)-152.4)
For females... IBW = 45.5 + 0.91((Height in cm)-152.4)
set.seed(1000)
weight <- rnorm(10, 100, 20) # weight in kilograms
sex <- (0:1) # 0 for Male, 1 for Female
height <- rnorm(10, 150, 10) # height in centimeters
df <- data.frame(weight, sex, height)
df
我一直在阅读其他使用 if else
语句和其他条件格式的帖子,但我总是遇到错误。这是我经常为数据集做的事情,我正试图找出完成这项任务的最佳方法。
应该这样做
df$ibw <- ifelse(df$sex == 0, 50 + 0.91 * (df$height - 152.4),
45.5 + 0.91 * (df$height - 152.4))
你可以使用单线:
df$IBW <- 0.91 * (df$height - 152.4) + 50 - 4.5 * df$sex
df
# weight sex height IBW
# 1 91.08443 0 140.1757 38.87591
# 2 75.88287 1 144.4551 38.27015
# 3 100.82253 0 151.2138 48.92057
# 4 112.78777 1 148.7913 42.21606
# 5 84.26891 0 136.6396 35.65803
# 6 92.29021 1 151.7006 44.86352
# 7 90.48264 0 151.5508 49.22722
# 8 114.39501 1 150.2493 43.54288
# 9 99.62989 0 129.5341 29.19207
# 10 72.53764 1 152.1315 45.25570
如果sex = 1
(女),那么我们就减去50 - 45.5 = 4.5
像这样的东西应该有用。
df$ibw <- 0
df[df$sex == 0,]$ibw <- 50 + 0.91*df[df$sex == 0,]$height - 152.4
df[df$sex == 1,]$ibw <- 45.5 + 0.91*df[df$sex == 1,]$height - 152.4
我是一名编程新手,试图从包含身高、性别和实际体重的大型数据集中计算一些理想体重数据。我想根据每个人的理想体重计算在数据框 (df$ibw) 中创建一个新列。
男性和女性的理想体重 (IBW) 计算方式不同。
For males... IBW = 50 + 0.91((Height in cm)-152.4)
For females... IBW = 45.5 + 0.91((Height in cm)-152.4)
set.seed(1000)
weight <- rnorm(10, 100, 20) # weight in kilograms
sex <- (0:1) # 0 for Male, 1 for Female
height <- rnorm(10, 150, 10) # height in centimeters
df <- data.frame(weight, sex, height)
df
我一直在阅读其他使用 if else
语句和其他条件格式的帖子,但我总是遇到错误。这是我经常为数据集做的事情,我正试图找出完成这项任务的最佳方法。
应该这样做
df$ibw <- ifelse(df$sex == 0, 50 + 0.91 * (df$height - 152.4),
45.5 + 0.91 * (df$height - 152.4))
你可以使用单线:
df$IBW <- 0.91 * (df$height - 152.4) + 50 - 4.5 * df$sex
df
# weight sex height IBW
# 1 91.08443 0 140.1757 38.87591
# 2 75.88287 1 144.4551 38.27015
# 3 100.82253 0 151.2138 48.92057
# 4 112.78777 1 148.7913 42.21606
# 5 84.26891 0 136.6396 35.65803
# 6 92.29021 1 151.7006 44.86352
# 7 90.48264 0 151.5508 49.22722
# 8 114.39501 1 150.2493 43.54288
# 9 99.62989 0 129.5341 29.19207
# 10 72.53764 1 152.1315 45.25570
如果sex = 1
(女),那么我们就减去50 - 45.5 = 4.5
像这样的东西应该有用。
df$ibw <- 0
df[df$sex == 0,]$ibw <- 50 + 0.91*df[df$sex == 0,]$height - 152.4
df[df$sex == 1,]$ibw <- 45.5 + 0.91*df[df$sex == 1,]$height - 152.4