% -6ren">
gpt4 book ai didi

r - 计算数据帧中分组明智(标签)的峰值函数,并进一步将其绑定(bind)到新数据帧中

转载 作者:行者123 更新时间:2023-12-03 23:18:50 24 4
gpt4 key购买 nike

我是在 Stack 上提问的新手,所以如果我弄错了,请原谅我。这是场景(我试图用一个简单的例子来重现它):

library("pracma") 
Tag<- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,5, 5,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6)
Temp<- c(43, 44, 45, 41, 43, 38, 40, 41, 39, 37, 37, 39, 45, 42, 41, 43, 44, 39,38,
37, 43, 44, 45, 41, 43, 38, 40, 41, 39, 37, 37, 39, 45, 42, 41, 43, 44,
39, 38, 37, 43, 44, 45, 41, 43, 38, 40, 41, 39, 37, 37, 39, 45, 42, 41,43,
44, 39, 38, 37)
dfr=data.frame(Tag=Tag,Temp=Temp)

数据说明 - 我们有两列:
标签 [分组明智变量]
温度 (必须执行峰值功能的数值变量)
for (i in 1:6) {

df=filter(dfr , dfr$Tag == i)
pik =findpeaks(df$Temp, nups = 1, ndowns = 0, zero = "+", peakpat = NULL,
minpeakheight = 33, minpeakdistance = 4,
threshold =0.42, npeaks = 11, sortstr = FALSE)#Peak Function

pik<- as.data.frame(pik)#Converting into data frame as it is in matrix form
names(pik) <- c("Temp","Peak_Mid","Peak_start","Peak_End")# renaming the header
pik <- arrange(pik , Peak_Mid)#Rearranging with Peak_Mid
attach(pik)#attaching pik df
j=1#initializing for loop
s=0#initializing for loop
for (j in 1:nrow(pik))#for loop for calculating slope individual points
s[[j]]=((Temp[j+1]-Temp[j])/(Peak_Mid[j+1]-Peak_Mid[j]))
pik$Trend <- 0#creating new column(Trend) filled with zero
pik$Trend <- s# inserting the calculated s variable onto pik df
w[[i]]=as.data.frame(pik)
}

我试图把上面的代码变成 for循环,使得在每个 i th 值 i:e ( Tag[i] 在我们的例子中 i 根据我们的数据从 1 到 6)。所以每次为 Tag[i]将通过峰值函数计算,然后我们将计算点之间的斜率,我们将得到一个包含 4 列的新数据框。

此计算将在每个 Tag[i] 上执行。这是主数据框的子集。所以,我们会得到 i不同的数据帧,这些数据帧将与标签号一起rbind。

这是具有预期输出的输入的视觉效果:

最佳答案

使用 tidyverse我们可以做的图书馆:

result <- dfr %>% 
split(.$Tag) %>%
map(~findpeaks(.$Temp, nups = 1, ndowns = 0, zero = "+", peakpat = NULL, minpeakheight = 33, minpeakdistance = 4, threshold = 0.42, npeaks = 11, sortstr = FALSE)) %>%
map_df(~data_frame(Temp = parse_number(.x[,1]),
Peak_Mid = parse_number(.x[,2]),
Peak_start = parse_number(.x[,3]),
Peak_End= parse_number(.x[,4])),
.id = 'Tag') %>%
arrange(Tag, Peak_Mid) %>%
group_by(Tag) %>%
mutate(Trend= (lead(Temp)-Temp)/(lead(Peak_Mid)-Peak_Mid))
这将按顺序:
  • 拆分原文dataset变成 listdatasets ,基于 Tag值(value)。 ( split )
  • 对于每个 dataset在列表中,执行 findpeaks函数,使用提供的参数,结果是 matrix . ( map )
  • 对于每个 matix转换为 data.frame , 改名。 ( data_frame )
  • 减少到单个 data.frame . ( map_df )
  • 按所需顺序排列。 ( arrange )
  • 计算 Trent柱子。 ( mutate )

  • 希望这可以帮助
    更新
    截至 2021 年, map_df call 应重写为:
    map_df(~tibble(
    Temp = .x[,1],
    Peak_mid = .x[,2],
    Peak_start = .x[,3],
    Peak_End = .x[,4]),
    .id = "Tag")

    关于r - 计算数据帧中分组明智(标签)的峰值函数,并进一步将其绑定(bind)到新数据帧中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42241478/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com