2017-08-29 62 views
3

我有一个数据框,并且想要计算每行中所有列具有相同值的行数。分别统计所有列具有相同值的行数

cmp <- read.table(text = " 
A B C D 
1 1 1 0 
1 1 1 1 
2 2 2 2 
3 3 3 0", header = TRUE) 

在此,计数为2,因为在第二行和第三行仅具有一个唯一的每一个值,仅1 s和仅2 S:

例如,我有这样的数据。

在此先感谢。

回答

6

本,它采用apply()计算每行中不同元素的数量,应该做的伎俩:

sum(apply(cmp, 1, function(x) length(unique(x))==1)) 
## [1] 2 
+0

或者与性能稍微更少的字符:'总和(申请(CMP,1,函数(x)的标准差(X)== 0))') – Henrik

+0

@Henrik哈!当然(就像其他一些已经提供的解决方案),如果data.frame包含任何“NA”值,就会失败。另外,与我的不同,它不会自动推广到包含例如字符值的列。 –

3

您可以检查是否跨行最大值和最小值都相同

sum(do.call(pmax, cmp) == do.call(pmin, cmp)) 
#[1] 2 

为了获得其中相同的值存在于行

which(do.call(pmax, cmp) == do.call(pmin, cmp)) 
#[1] 2 3 
4

计算每行的值等于第一个值的数量。如果此计数等于列数,则该行中的所有值都是相同的。

sum(rowSums(cmp == cmp[ , 1]) == ncol(cmp)) 
#[1] 2 
相关问题