对于每个唯一ID,我想使用由唯一ID指定的一系列曲线(Time,SkinTemp)的 lapply (或聚合)来计算SkinTemp的每个值之间的最大差异在data.frame中。
到目前为止,我有以下内容,但它返回一个不正确的值:
df<-data.frame(Time=seq(100),
SkinTemp=rnorm(100,37,0.5),
id=rep(1:10,each=10))
maxDiff<-function(id,df) {
a<-max(diff(df$SkinTemp))
a
}
maxA<-lapply(id,maxDiff,df)
为什么它没有为每个id检索SkinTemp的唯一最大值?
修改
使用聚合没问题(我认为它是ddplyr包)
aggregate(data=df,SkinTemp~id,function(x)max(diff(x)))
那么lapply我做错了什么?
答案 0 :(得分:0)
问题与您的maxDiff功能有关。 maxDiff函数应用于整个数据集,因为未指定id。如果你想做一个id,你需要在调用lapply之前在函数中指定它。
maxDiff<-function(id,df) {
a<-max(diff(df$SkinTemp[df["id"]==id]))
a }
lapply(unique(id),maxDiff,df)
或者没有maxDiff你可以像lamply / sapply一样指定整个函数
sapply(unique(df$id), function(x) max(diff(df$SkinTemp[df["id"]==x])))
答案 1 :(得分:0)
如果我读得正确,你试图找到每个id的最大值,因为你可以使用for循环。
get_Max_skin_temp_per_id<-function(){
df<-data.frame(Time=seq(100),
SkinTemp=rnorm(100,37,0.5),
id=rep(1:10,each=10))
maxSkin<-vector()
for (ids in 1:10) {
a<-as.numeric(max(df$SkinTemp[ids]))
maxSkin<-c(maxSkin, rep(a, 10))
}
df$maxSkin<-maxSkin
return(df)
}
get_Max_skin_temp_per_id()
这将在id列之后的列中重复每个id的最大值。希望能帮助到你。 只是得到一个项目列表。改为:
get_Max_skin_temp_per_id<-function(){
df<-data.frame(Time=seq(100),
SkinTemp=rnorm(100,37,0.5),
id=rep(1:10,each=10))
maxSkin<-vector()
for (ids in 1:10) {
a<-as.numeric(max(df$SkinTemp[ids]))
maxSkin<-c(maxSkin, a)
}
return(a)
}
get_Max_skin_temp_per_id()