我在两年的时间里有大量的股票数据。数据框按股票id和日期排序,也就是说,首先我有一个股票的所有数据,然后是第二个股票的所有数据,依此类推。现在,我想为每个股票用NA替换一列中的前29个值(行)。有没有简单的方法可以做到这一点?
我试着使用:
aggregate(column~stock_id, data = df, FUN = function(x){x[1:29] <- NA})但它不起作用。
发布于 2021-04-06 22:05:17
aggregate是用于汇总的--每组只有1行。您想要相同的行数,所以aggregate不适合您。
我会使用dplyr
library(dplyr)
df %>% group_by(stock_id) %>%
mutate(column = case_when(row_number() < 30 ~ NA_real_, TRUE ~ column))发布于 2021-04-06 23:44:02
在base R中,我们可以使用ave
i1 <- with(df, ave(seq_along(stock_id), stock_id, FUN = seq_along) < 30)
df[i1, setdiff(names(df), 'stock_id)] <- NAhttps://stackoverflow.com/questions/66970080
复制相似问题