【发布时间】:2017-08-29 21:45:03
【问题描述】:
我有一个数据框,我想计算每一行中所有列具有相同值的行数。
例如,我有这个数据:
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,因为第二行和第三行各只有一个唯一值,分别只有1s和2s。
提前致谢。
【问题讨论】:
标签: r
我有一个数据框,我想计算每一行中所有列具有相同值的行数。
例如,我有这个数据:
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,因为第二行和第三行各只有一个唯一值,分别只有1s和2s。
提前致谢。
【问题讨论】:
标签: r
这个使用apply() 来计算每行中不同元素的数量,应该可以解决问题:
sum(apply(cmp, 1, function(x) length(unique(x))==1))
## [1] 2
【讨论】:
sum(apply(cmp, 1, function(x) sd(x) == 0)) ;)
NA 值,它就会失败。此外,与我的不同,它不会自动泛化到包含例如字符值的列。
计算每行等于第一个值的值的数量。如果此计数等于列数,则该行中的所有值都相同。
sum(rowSums(cmp == cmp[ , 1]) == ncol(cmp))
#[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
【讨论】:
tidyverse 方式:
df %>%
rowwise() %>%
mutate(unique_vals = length(unique(c_across(everything()))))
这为您提供了所选列的唯一值的数量——您可以随意将everything() 更改为您需要的任何值。然后,您可以随意过滤/求和此变量。
【讨论】: