我有以下数据(在数据帧中),它们按每4行分组。
x y
1 1.495 0.0
2 1.500 30.0
3 2.500 30.0
4 2.505 0.0
5 8.495 0.0
6 8.500 30.0
7 9.500 30.0
8 9.505 0.0
9 10.495 0.0
10 10.500 30.0
11 11.500 30.0
12 11.505 0.0
13 16.495 0.0 ##From here
14 16.500 30.0
15 17.500 30.0
16 17.505 0.0
17 17.495 0.0
18 17.500 30.0
19 18.500 30.0
20 18.505 0.0 ## End here
21 19.495 0.0
22 19.500 30.0
23 20.500 30.0
24 20.505 0.0
25 23.495 0.0
26 23.500 30.0
27 24.500 30.0
28 24.505 0.0
.
.
.
我试图更改重叠的行的y值(根据其x值)。例如,行(13至16)与行(17至20)重叠。
第13-16行的x值:16.495 16.500 -------- 17.500 17.505
第17-20行的x值:------------------ 17.495 17.500 ---------- 18.500 18.505
从17.495到17.505有重叠。
我想将“中间”行变成类似以下内容:
13 16.495 0.0 ##From here
14 16.500 30.0
15 17.500 30.0
16 17.505 30.0
17 17.495 30.0
18 17.500 30.0
19 18.500 30.0
20 18.505 0.0 ## End here
有什么想法吗?
答案 0 :(得分:1)
使用for循环,您可以执行以下操作(假设您的数据帧称为df
):
# defining start and end values to process data by group of 4
start = seq(1,length(df$x),by = 4)
end = seq(4,length(df$x),by = 4)
# loop to inspect data by group of 4 and replace data in df in function of the overlap
for(i in 1:(length(start)-1))
{
if(max(df[start[i]:end[i],"x"]) > min(df[start[i+1]:end[i+1],"x"]))
{
df[end[i],"y"] = 30.0
df[start[i+1],"y"] = 30.0
}
else{}
}
您将获得以下数据框:
> df
x y
1 1.495 0
2 1.500 30
3 2.500 30
4 2.505 0
5 8.495 0
6 8.500 30
7 9.500 30
8 9.505 0
9 10.495 0
10 10.500 30
11 11.500 30
12 11.505 0
13 16.495 0
14 16.500 30
15 17.500 30
16 17.505 30
17 17.495 30
18 17.500 30
19 18.500 30
20 18.505 0
21 19.495 0
22 19.500 30
23 20.500 30
24 20.505 0
25 23.495 0
26 23.500 30
27 24.500 30
28 24.505 0
答案 1 :(得分:1)
看到当前的样本数据,您似乎想要标识x中的上一个值大于x中的下一个值的行。在这种情况下,第17行就是那个。同样,您要标识x中的值大于x中以下值的行。在这种情况下,第16行就是那个。因此,我尝试通过以下方式获取这些行的行号。请注意,此处的数据称为this.recBuffers[i].push([...e.inputBuffer.getChannelData(i)]);
。
mydf
这是您指定零件的结果。希望对您有帮助。
ind <- c(which(x = lag(mydf$x) > mydf$x), which(x = lead(mydf$x) < mydf$x))
# Overwrite two specific elements in y
mydf$y[ind] <- 30