如何从预先存在的变量有条件地计算新变量?

时间:2016-11-21 18:16:59

标签: r if-statement calculated-columns

我是一名编程新手,试图从高,性和实际体重的大数据集中计算出一些理想的体重数字。我想根据每个人的理想体重计算在数据框(df $ ibw)中创建一个新列。

理想体重(IBW)的计算方法与男性和女性不同。

  

男性...... IBW = 50 + 0.91((身高cm)-152.4)

     

女性...... IBW = 45.5 + 0.91((身高cm)-152.4)

arr.groupBy(_._2).map(x => (x._1,x._2.toList.length))

我一直在使用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 语句和其他条件格式阅读其他帖子,但我一直在收到错误。这是我经常为数据集做的事情,我试图找出完成这项任务的最佳方法。

3 个答案:

答案 0 :(得分:1)

这应该这样做

df$ibw <- ifelse(df$sex == 0, 50 + 0.91 * (df$height - 152.4),
             45.5 + 0.91 * (df$height - 152.4))

答案 1 :(得分:1)

你可以使用单行:

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

答案 2 :(得分:1)

这样的事情应该有效。

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