簡體   English   中英

r - 將函數應用於跨數據幀行的單個單元格

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM