让我们说我正在处理来自足球运动员的数据。我有球员'名字,他们参加过的国家,以及他们在这些国家进球的目标。
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个)。
答案 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))