我有这样的数据
df<-structure(list(best2 = c(8972.7, 1944, 2022.7, 13001.7, NA, 3228.6,
NA, 186.4, 100, 2655.9), best3 = c(2634.4, 1181.3, 505.2, 2802.4,
NA, 1707.6, NA, 186.4, 100, 1219), best4 = c(3079.3, 1512.9,
NA, 2804.5, NA, 1597.6, NA, 186.4, 100, 1558.2), best5 = c(8972.7,
1944, NA, 13001.7, NA, 3228.6, NA, 186.4, 100, 2655.9), best6 = c(2634.4,
1181.3, NA, 2802.4, NA, 1707.6, NA, 186.4, 100, 1219), best7 = c(3079.3,
1512.9, NA, 2804.5, NA, 1597.6, NA, 186.4, 100, 1558.2), best8 = c(8972.7,
1944, NA, 13001.7, NA, 3228.6, NA, 186.4, 100, 2655.9), best9 = c(2634.4,
1181.3, NA, 2802.4, NA, 1707.6, NA, 186.4, 100, 1219)), .Names = c("best2",
"best3", "best4", "best5", "best6", "best7", "best8", "best9"
), row.names = c(NA, -10L), class = "data.frame")
我想立刻做所有这些事情
所有单元格为空或NA
的1计数行数回答:2
具有所有单元格的常量值的2计数行
回答:2
前半空单元格的3个计数行
回答:0
具有后半空单元的4个计数行
回答:1
答案 0 :(得分:3)
我们可以使用apply
函数迭代data.frame
的行。然后,我们在逻辑向量上使用rowSums
。
rowSums(all_logicals <- apply(df, 1, function(r){
n <- length(r)
nc2 <- n / 2
nc2_plus1 <- nc2 + 1
c('allNA' = all(is.na(r)),
'allconstant' = (length(unique(r)) == 1 & !all(is.na(r))),
'firsthalf' = all(is.na(r[1:nc2])) & !all(is.na(r[nc2_plus1:n])),
'secondhalf' = all(is.na(r[nc2_plus1:n])) & !all(is.na(r[1:nc2])))
}))
allNA allconstant firsthalf secondhalf
2 2 0 1
查看apply
传递给rowSums
的结果可能会有所帮助:
all_logicals
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
allNA FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE
allconstant FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE
firsthalf FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
secondhalf FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
我们可以使用all_logicals
来查找我们要删除的行索引:
remove_rows <- unique(unlist(apply(all_logicals, 1, which)))
(df_sub <- df[-remove_rows,])
best2 best3 best4 best5 best6 best7 best8 best9
1 8972.7 2634.4 3079.3 8972.7 2634.4 3079.3 8972.7 2634.4
2 1944.0 1181.3 1512.9 1944.0 1181.3 1512.9 1944.0 1181.3
4 13001.7 2802.4 2804.5 13001.7 2802.4 2804.5 13001.7 2802.4
6 3228.6 1707.6 1597.6 3228.6 1707.6 1597.6 3228.6 1707.6
10 2655.9 1219.0 1558.2 2655.9 1219.0 1558.2 2655.9 1219.0