2015-04-28 66 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)