我有一个数据框,我想计算每行内所有列具有相同值的行数。
例如,我有这些数据:
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
个。
提前致谢。
答案 0 :(得分:6)
这使用apply()
来计算每行中不同元素的数量,应该可以解决这个问题:
sum(apply(cmp, 1, function(x) length(unique(x))==1))
## [1] 2
答案 1 :(得分:4)
计算每行的值数等于第一个值。如果此计数等于列数,则行中的所有值都相同。
CAST(DATEADD(Month,-6,cast(DATEADD(year,DATEDIFF(year,'01/01/2017',GETDATE()),'01/01/2017') AS DATE)) AS DATE) as [6 mo Anniv]
答案 2 :(得分:3)
您可以检查行间的最大值和最小值是否相同
sum(do.call(pmax, cmp) == do.call(pmin, cmp))
#[1] 2
获取存在相同值的行
which(do.call(pmax, cmp) == do.call(pmin, cmp))
#[1] 2 3
答案 3 :(得分:0)
整洁的方式:
df %>%
rowwise() %>%
mutate(unique_vals = length(unique(c_across(everything()))))
这为您提供了所选列的唯一值的数量——您可以随意将 everything()
更改为您需要的任何值。然后,您可以随意过滤/求和这个变量。