R 用 NA 替换前 n 列值

时间:2021-04-06 13:57:14

标签: r

我有大量两年期间的股票数据。数据框按股票 ID 和日期排序,即首先我拥有一只股票的所有数据,然后是第二只股票的所有数据,依此类推。现在我想用 NA 为每只股票替换列中的前 29 个值(行)。有没有简单的方法可以做到这一点?

我曾尝试使用:

aggregate(column~stock_id, data = df, FUN = function(x){x[1:29] <- NA})

但它不起作用。

2 个答案:

答案 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