我有大量两年期间的股票数据。数据框按股票 ID 和日期排序,即首先我拥有一只股票的所有数据,然后是第二只股票的所有数据,依此类推。现在我想用 NA 为每只股票替换列中的前 29 个值(行)。有没有简单的方法可以做到这一点?
我曾尝试使用:
aggregate(column~stock_id, data = df, FUN = function(x){x[1:29] <- NA})
但它不起作用。
答案 0 :(得分:2)
aggregate
用于总结 - 每组最终有 1 行。您需要相同数量的行,因此 aggregate
不适合您。
我会使用 dplyr
:
library(dplyr)
df %>% group_by(stock_id) %>%
mutate(column = case_when(row_number() < 30 ~ NA_real_, TRUE ~ column))
答案 1 :(得分:1)
在base R
中,我们可以使用ave
i1 <- with(df, ave(seq_along(stock_id), stock_id, FUN = seq_along) < 30)
df[i1, setdiff(names(df), 'stock_id)] <- NA