2016-11-21 39 views
0

我是一個編程新手,試圖從一個身高,性別和實際體重的大數據集中計算出一些理想的體重數字。我想根據每個人的理想體重計算在數據框(df $ ibw)中創建一個新列。如何有條件地從預先存在的變量計算新變量?

對於男性和女性,理想體重(IBW)的計算方法不同。

對於男性... IBW = 50 + 0.91((身高釐米)-152.4)

對於女性... IBW = 45.5 + 0.91((身高釐米)-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陳述和其他條件格式,但我不斷收到錯誤。這是我將經常爲數據集所做的事情,我正試圖找出完成此任務的最佳方法。

+1

'df $ IBW < - 0.91 *(df $ height - 152.4)+ 50 - 4.5 * df $ sex'? – etienne

回答

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

1

這應該這樣做

df$ibw <- ifelse(df$sex == 0, 50 + 0.91 * (df$height - 152.4), 
      45.5 + 0.91 * (df$height - 152.4)) 
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