R 如何在data.tables中使用i根据条件选择所有列的行
我有一个包含400多列的数据集,我试图找出哪些行的所有列都有NAs。在data.table框架中写出所有列的名称是不可行的,例如R 如何在data.tables中使用i根据条件选择所有列的行,r,dataframe,data.table,conditional-statements,R,Dataframe,Data.table,Conditional Statements,我有一个包含400多列的数据集,我试图找出哪些行的所有列都有NAs。在data.table框架中写出所有列的名称是不可行的,例如 data[is.na(colA) & is.na(colB) ... ] 是否有一种方法可以轻松地跨所有列执行此操作?这是一个玩具数据集,其中一行全部为NAs,另一行全部为1。返回包含所有NAs的行的最佳方式是什么?是否有类似的方法返回所有1s的行?谢谢 > toy <- data.table(cbind(A1 = c(1,5,6,NA,1),
data[is.na(colA) & is.na(colB) ... ]
是否有一种方法可以轻松地跨所有列执行此操作?这是一个玩具数据集,其中一行全部为NAs,另一行全部为1。返回包含所有NAs的行的最佳方式是什么?是否有类似的方法返回所有1s的行?谢谢
> toy <- data.table(cbind(A1 = c(1,5,6,NA,1),
+ B1 = c(1,NA,4,NA,0),
+ C1 = c(1,1,6,NA,10),
+ D1 = c(1,NA,4,NA,5),
+ E1 = c(1,2,11,NA,8)))
> toy
A1 B1 C1 D1 E1
1: 1 1 1 1 1
2: 5 NA 1 NA 2
3: 6 4 6 4 11
4: NA NA NA NA NA
5: 1 0 10 5 8
> # the goal
> toy[1]
A1 B1 C1 D1 E1
1: 1 1 1 1 1
> toy[4]
A1 B1 C1 D1 E1
1: NA NA NA NA NA
玩具
A1 B1 C1 D1 E1
1: 1 1 1 1 1
2:5Na1Na2
3: 6 4 6 4 11
4:NA-NA-NA-NA-NA
5: 1 0 10 5 8
>#目标
>玩具[1]
A1 B1 C1 D1 E1
1: 1 1 1 1 1
>玩具[4]
A1 B1 C1 D1 E1
1:NA-NA-NA-NA
文字实现:
toy[rowSums(sapply(toy,is.na))==ncol(toy),]
#A1 B1 C1 D1 E1
#1:NA-NA-NA-NA
玩具[行和(玩具==1)==ncol(玩具),]
#A1 B1 C1 D1 E1
# 1: 1 1 1 1 1
稍有改进,取消了对ncol(toy)
的调用,尽管我怀疑相信这会提高速度是一厢情愿的想法:
toy[rowSums(sappy(toy,Negate(is.na))==0,]
toy[rowSums(toy!=1)==0,]
文字实现:
toy[rowSums(sapply(toy,is.na))==ncol(toy),]
#A1 B1 C1 D1 E1
#1:NA-NA-NA-NA
玩具[行和(玩具==1)==ncol(玩具),]
#A1 B1 C1 D1 E1
# 1: 1 1 1 1 1
稍有改进,取消了对ncol(toy)
的调用,尽管我怀疑相信这会提高速度是一厢情愿的想法:
toy[rowSums(sappy(toy,Negate(is.na))==0,]
toy[rowSums(toy!=1)==0,]
这里有一个带有Reduce的选项
library(data.table)
toy[toy[, Reduce(`&`, lapply(.SD, is.na))]]
# A1 B1 C1 D1 E1
#1: NA NA NA NA NA
toy[toy[, Reduce(`&`, lapply(.SD, `==`, 1))]]
# A1 B1 C1 D1 E1
# 1: 1 1 1 1 1
这里有一个带有Reduce
library(data.table)
toy[toy[, Reduce(`&`, lapply(.SD, is.na))]]
# A1 B1 C1 D1 E1
#1: NA NA NA NA NA
toy[toy[, Reduce(`&`, lapply(.SD, `==`, 1))]]
# A1 B1 C1 D1 E1
# 1: 1 1 1 1 1
您可以尝试toy[toy[,rowSums(is.na(.SD))==length(.SD)]
但不确定效率有多高。您可以尝试toy[toy[,rowSums(is.na(.SD))==length(.SD)]
但不确定效率有多高。我经常忘记这些函数中的一些在总体上起作用,谢谢chinsoon12我经常忘记这些功能中的一些在整体上起作用,谢谢chinsoon12