如何计算每列两列中的值都不是NA?

时间:2014-10-31 15:56:50

标签: r

让我们说我正在处理来自足球运动员的数据。我有球员'名字,他们参加过的国家,以及他们在这些国家进球的目标。

  players England USA Brazil
1     ben       0   3    NA
2    josh       3   0     2
3    mike       3   0     4
4     sam       0   3     3
5    luis      NA   1    NA
6    john       1   NA    1
7    javi       NA  NA    3
8   terry       1   1     NA

我想比较每对列。所以我想要的是三个数字:英格兰,美国专栏连续两个数字的次数(这里是5个),美国,巴西连续两个数字的次数(这里有3个) ),以及英格兰,巴西专栏中有两个数字的次数(这里有4个)。

  • 我在评论之后编辑了这个问题,让我意识到只用两列发布问题就可以解决问题了。

2 个答案:

答案 0 :(得分:2)

您也可以使用

sum(!rowSums(is.na(df[,-1])))
#[1] 5

更新

基于新数据集

 indx <- combn(colnames(df)[-1],2)
 res <- sapply(split(indx, col(indx)), function(x) 
                          sum(!rowSums(is.na(df[,x]))))

 names(res) <- apply(indx,2, paste, collapse="_")
 res
 # England_USA England_Brazil     USA_Brazil 
 #        5              4              3 

较短的代码(由@Ananda Mahto建议)将是:

 unlist(combn(df[-1], 2, function(x) 
            setNames(sum(complete.cases(x)), 
            paste(names(x), collapse = "-")), simplify = FALSE))

# England-USA England-Brazil     USA-Brazil 
#         5              4              3 

答案 1 :(得分:0)

使用is.na和......

txt<-'players England USA
1     ben       0   3
2    josh       3   0
3    mike       3   0
4     sam       0   3
5    luis      NA   1
6    john       1   NA
7    javi       NA  NA
8   terry       1   1 '

df<-read.table(text=txt)

bothNArows <- which(is.na(df$England) & is.na(df$USA))
(nbad<-length(bothNArows))