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, ]
我们可以使用 Reduce
和 base R
中的 lapply
prices <- prices[!Reduce(`&`, lapply(prices[2:21], is.na)),]
我有一个包含 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, ]
我们可以使用 Reduce
和 base R
lapply
prices <- prices[!Reduce(`&`, lapply(prices[2:21], is.na)),]