gpt4 book ai didi

r - 使用 R 检查是否有任何 n 列包含相同的值?

转载 作者:行者123 更新时间:2023-12-04 07:48:29 25 4
gpt4 key购买 nike

我有一个看起来像这样的数据框:

 a    b    c    d      
1 0 1 1
.5 1 1 0
.5 1 .5 .5
0 0 1 NA
0 1 0 1
我想检查 3 列中是否有任何列包含相同的值,以便输出如下所示:
 val.   count
1 1
.5 1
我正在尝试对任何 n 列执行此操作。到目前为止,我只是使用 ifelse 语句对每个场景进行硬编码,如下所示:
  t <- data %>%
select(ivs) %>%
mutate(all = ifelse(a == 1 &
b == 1 &
c == 1 &
d == 1, 1 , 0),
any_3 = ifelse((a == 1 &
b == 1 &
c == 1 &
d == 0) |
(a == 1 &
b == 1 &
c == 0 &
d == 1) |
(a == 0 &
b == 1 &
c == 1 &
d == 1)|
(a == 0 &
b == 1 &
c == 1 &
d == 1), 1, 0 ) )

我希望有更好的方法来做到这一点。谢谢!

最佳答案

这是一种更简单的方法,但输出略有不同。
它的工作原理

  • 使用 combn得到 df1 的(列)向量的组合, 3 乘 3;
  • 对于每个组合,应用一个匿名函数来检查所有值是否都等于第一个值,因此所有值都彼此相等。

  • 然后, table结果并强制到data.frame。
    val <- combn(df1, 3, function(x) {
    apply(x, 1, function(y) if(!anyNA(y) & all(y == y[1])) y[1] else NA )
    })
    as.data.frame(table(val))
    # val Freq
    #1 0.5 1
    #2 1 1

    数据
    df1 <- read.table(text = "
    a b c d
    1 0 1 1
    .5 1 1 0
    .5 1 .5 .5
    0 0 1 NA
    0 1 0 1
    ", header = TRUE)

    关于r - 使用 R 检查是否有任何 n 列包含相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67092641/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com