R 移动时间序列(将所有值降低到某个阈值以下)
我有以下data.frame:R 移动时间序列(将所有值降低到某个阈值以下),r,dataframe,time-series,tidyverse,tidyr,R,Dataframe,Time Series,Tidyverse,Tidyr,我有以下data.frame: A <- c(10,20,30,90,180,400) B <- c(5, 25, 50, 401, 490, 500) C <- c(200, 300, 480, 890, 1100, 1200) df <- data.frame(A, B, C) df 现在,我想移动时间序列A、B和C,使第一个值高于某个树阈值(例如400)。所以结果应该是这样的: A B C 1 10 5 200 2 20 25 30
A <- c(10,20,30,90,180,400)
B <- c(5, 25, 50, 401, 490, 500)
C <- c(200, 300, 480, 890, 1100, 1200)
df <- data.frame(A, B, C)
df
现在,我想移动时间序列A、B和C,使第一个值高于某个树阈值(例如400)。所以结果应该是这样的:
A B C
1 10 5 200
2 20 25 300
3 30 50 480
4 90 401 890
5 180 490 1100
6 400 500 1200
A B C
1 400 401 480
2 NA 490 890
3 NA 500 1100
4 NA NA 1200
我们可以使用
sapply
对高于阈值的列和筛选值进行循环。然后,我们可以使用cbind.fill
fromrowr
组合它们
setNames(do.call(rowr::cbind.fill, c(sapply(df, function(x)
x[x >= 400]), fill = NA)), names(df))
# A B C
#1 400 401 480
#2 NA 490 890
#3 NA 500 1100
#4 NA NA 1200
一个
tidyverse
选项是:
library(tidyverse)
map(df, ~.x[.x >= 400]) %>%
enframe() %>%
unnest(value) %>%
group_by(name) %>%
mutate(row = row_number()) %>%
pivot_wider() %>%
select(-row)