我有一个数据框
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))
我需要一个能够查看每一行的函数,如果数字是&gt; 32.5,则存储差异,并添加第五列,其中该行中所有列的累积差异&gt; 32.5。 NA被忽略。所以我希望第一行得到4.5的结果。
答案 0 :(得分: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)