我有一个数据框,并且想要计算每行中所有列具有相同值的行数。分别统计所有列具有相同值的行数
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:
例如,我有这样的数据。
在此先感谢。
我有一个数据框,并且想要计算每行中所有列具有相同值的行数。分别统计所有列具有相同值的行数
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:
例如,我有这样的数据。
在此先感谢。
本,它采用apply()
计算每行中不同元素的数量,应该做的伎俩:
sum(apply(cmp, 1, function(x) length(unique(x))==1))
## [1] 2
您可以检查是否跨行最大值和最小值都相同
sum(do.call(pmax, cmp) == do.call(pmin, cmp))
#[1] 2
为了获得其中相同的值存在于行
which(do.call(pmax, cmp) == do.call(pmin, cmp))
#[1] 2 3
计算每行的值等于第一个值的数量。如果此计数等于列数,则该行中的所有值都是相同的。
sum(rowSums(cmp == cmp[ , 1]) == ncol(cmp))
#[1] 2
或者与性能稍微更少的字符:'总和(申请(CMP,1,函数(x)的标准差(X)== 0))') – Henrik
@Henrik哈!当然(就像其他一些已经提供的解决方案),如果data.frame包含任何“NA”值,就会失败。另外,与我的不同,它不会自动推广到包含例如字符值的列。 –