我有一个问题,我可以在2分钟内在excel中手动完成,但我需要将它合并到R中的函数中。
原始数据集:
df <- data.frame(week=c(1:52), values=c(77, 87, 74, 72, 62, 79, 85, 114, 170, 178,
141, 143, 118, 124, 112, 92, 76, 64, 62,
75, 63, 60, 76, 69, 60, 46, 42, 34, 23, 21, 19,
23, 23, 26, 24, 18, 21, 21, 25, 38, 21, 17, 20, 16,
9, 6, 6, 17, 36, 52, 65, 79))
看起来像这样:
week values
1 1 77
2 2 87
3 3 74
4 4 72
5 5 62
6 6 79
问题:我有一个基于一年中几周的值向量(我为示例数据集构建了一个较小的数据集)。我需要能够将最高值分配给0,然后给出该数字的任何一侧的每个值,具体取决于距离峰值多少周。峰值两侧的值可能会波动,因此我不能仅使用排名并使用该值分配数字,它必须按周排序。
我遇到的主要问题是我的周数根据我们的日历年编号,但峰值出现在第10周,所以我最终得到的值是1到42,高于第10周,-1到-9在第10周以下。
df_final <- data.frame(week=c(37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
47, 48, 49, 50, 51, 52, 1, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
31, 32, 33, 34, 35, 36),
values=c(21, 21, 25, 38, 21, 17, 20, 16, 9, 6, 6, 17, 36,
52, 65, 79, 77, 87, 74, 72, 62, 79, 85, 114, 170, 178,
141, 143, 118, 124, 112, 92, 76, 64, 62, 75, 63, 60,
76, 69, 60, 46, 42, 34, 23, 21, 19, 23, 23, 26, 24, 18),
centred = c(-25, -24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,
-12,-11,-10,-9,-8, -7, -6, -5, -4,-3, -2, -1, 0, 1,
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26))
我的最终数据集看起来像这样(头部):
week values centred
1 37 21 -25
2 38 21 -24
3 39 25 -23
4 40 38 -22
5 41 21 -21
6 42 17 -20
我完全不知道如何做到这一点。
非常感谢任何帮助或想法。
干杯,
取值
答案 0 :(得分:0)
如果你有一个很长的列表而你只是在列表中找到一个最大值,那么这可能有效:
mymax<-which.max(df$values)
len<-length(df$week)
df_fin<-cbind(df, centered= (-mymax+1):(-mymax+len))
新添加的列&#34;居中&#34;将有你想要的排名。这不会像你的df_final那样回收几周,这可以通过添加if语句来实现。
现在,如果您需要回收,那么此细分可能适合您:
mymax<-which.max(df$values)
df2<-rbind(df, df)
if(mymax<26){
mid=52+mymax
dff<-df2[(mid-25):(mid+26),]
}else{
mid=mymax
dff<-df2[(mid-25):(mid+26),]
}
dff<-cbind(dff, centred=-25:26)