[英]r - apply function to individual cells across rows of a dataframe
我的數據包含在數據框中排列的個體患者(每個患者由一行代表)的連續溫度測量值:
df<-data.frame(H0=c(35.4, 36.0, 36.0, 36.4), H1=c(NA, 34.0, 33.4, NA),
H2=c(NA, 33.5, NA, 34.2), H3=c(32.9, NA, 34.0, NA),
H4=c(NA, 33.1, NA, NA), H5=c(33.2, NA, NA, 32.8))
目標溫度為33.0。 我寫了一個簡單的函數,它返回每個測量值與目標溫度的差值:
sumfun<-function(x) {
if (x>=33 & !is.na(x)) {
x-33
} else if (x<33 & !is.na(x)) {
33-x
} else {
0
}
}
這在控制台中按預期工作。
我想要實現的是數據幀末尾的一列,其中包含每位患者的過沖/下沖測量值之和。
df$cumushoot<-rowSums(df[,1:6]-33, na.rm=TRUE)
接近我想要的,除了我想添加(不減去)下沖值。 因此,對於我想要2.6的第一位患者,返回2.5。 如果我嘗試:
df$cumushoot1<-rowSums(sumfun(df[,1:6]))
收益:
Warning message:
In if (x >= 33 & !is.na(x)) { :
the condition has length > 1 and only the first element will be used
這可能是一種可能性。 - 33
在整個數據框中循環使用,取差值的絕對值( abs
),並對每一行求和:
df$dif <- rowSums(abs(df - 33), na.rm = TRUE)
# H0 H1 H2 H3 H4 H5 dif
# 1 35.4 NA NA 32.9 NA 33.2 2.7
# 2 36.0 34.0 33.5 NA 33.1 NA 4.6
# 3 36.0 33.4 NA 34.0 NA NA 4.4
# 4 36.4 NA 34.2 NA NA 32.8 4.8
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.