2015-04-28 59 views
2

加專欄中,我有一個數據幀r功能找到,如果條件滿足,然後用累積差異

df<-data.frame(H0=c(35.4, NA, 36.0, 36.4), H1=c(32.3, 32.0, 34.3, 33.5), 
     H2=c(33.4, 31.5, 33, 34.2), H3=c(32.9, 33.0, 34.0, 33.0), 
     H4=c(32.8, NA, 34.5, 33.2)) 

我需要一個函數,將查看每行如果數字是> 32.5,存儲的區別,並添加第五列,該行的所有列的累計差異> 32.5。 NA被忽略。所以我期望第一行給出4.5的結果。

回答

3

也許

df$diff_32.5 <- apply(df, 1, function(x){sum(x[x>32.5]-32.5, na.rm=T)}) 

> df 
    # H0 H1 H2 H3 H4 diff_32.5 
# 1 35.4 32.3 33.4 32.9 32.8  4.5 
# 2 NA 32.0 31.5 33.0 NA  0.5 
# 3 36.0 34.3 33.0 34.0 34.5  9.3 
# 4 36.4 33.5 34.2 33.0 33.2  7.8 

有更多的步驟的另一種選擇:

df2 <- df-32.5 
df2[df2<0] <- 0 
df$diff_32.5 <- rowSums(df2, na.rm=TRUE)