R数据帧切片

R data frame slicing

我有一个包含 4352 个观察值和 21 列的数据框。第一列是日期向量,其他 20 列是数字向量(代表股票价格)。由于在某些日子(即周末和节假日)没有交易,因此一些观察结果在 2:21.

列中有 NA

以下代码向我展示了指示存在 NA 的逻辑数据框,测试数据框具有与输入相同的维度 table。

test <- is.na(prices[, 2:21]) %>% as.data.frame()

然而,当我执行以下操作时,结果是 48052 个带有附加行名称的观察结果,例如NA.40755

test <- prices[is.na(prices[, 2:21]) == 0, ]

但是当我在切片列时使用逗号而不是冒号时,我似乎得到了所需的输出(即 2970 次观察):

test <- prices[is.na(prices[, 2, 21]) == 0, ]

因此我的问题是为什么我必须切片 [ 2, 21] 而不是 [ 2:21]

is.na(prices[, 2:21]) 是具有 TRUE/FALSE 值的逻辑矩阵。我不确定你在比较它时试图做什么 == 0 因为那会 return 相同维度的逻辑矩阵。您需要使用 rowSums 将所有行值合并在一起,以便每行中只有 1 个值。

如果要删除包含所有 NA 值的行,您可以使用:

prices <- prices[rowSums(!is.na(prices[, 2:21])) > 0, ]

我们可以使用 Reducebase R

中的 lapply
prices <- prices[!Reduce(`&`, lapply(prices[2:21], is.na)),]