R 数据帧切片

R 数据帧切片,r,dataframe,slice,R,Dataframe,Slice,我有一个4352个观察值和21列的数据框架。第一列是日期向量,其他20列是数字向量(表示股票价格)。由于某些天(即周末和节假日)没有交易,因此一些观察结果在第2:21列中有NA 下面的代码向我显示了指示存在NA的逻辑数据框,并且测试数据框与输入表具有相同的维度 test <- is.na(prices[, 2:21]) %>% as.data.frame() 测试%as.data.frame() 但是,当我执行以下操作时,结果是48052个观察值,带有额外的行名称,例如NA.40

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

下面的代码向我显示了指示存在NA的逻辑数据框,并且测试数据框与输入表具有相同的维度

test <- is.na(prices[, 2:21]) %>% as.data.frame()
测试%as.data.frame()
但是,当我执行以下操作时,结果是48052个观察值,带有额外的行名称,例如NA.40755等

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

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

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

我们可以使用
Reduce
lappy
base R

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

prices或您可以使用dplyr包中的drop_na()。OP在这里没有共享示例,因此很难绝对确定,但是
drop_na
会删除具有任何
na
值的行。在这里,我将删除包含所有
NA
值的行。
prices <- prices[rowSums(!is.na(prices[, 2:21])) > 0, ]
prices <- prices[!Reduce(`&`, lapply(prices[2:21], is.na)),]