gpt4 book ai didi

r - 如何在 R 中的行中查找重复的列?

转载 作者:行者123 更新时间:2023-12-02 16:01:24 26 4
gpt4 key购买 nike

我下面有这样一个数据框,我想在这个数据框的每一行中找到重复的列。请参阅下面的输入和输出示例。 0 在第一行重复了 2 次,这就是为什么列 rep 应该是 0 (data_input[1,"rep"]=0); 2 在第二行重复了 2 次,这就是列 rep 应该为 0 的原因;第 3 行中没有重复值,这就是为什么列 rep 可以是 4(或者您可以添加任何值而不是 0,1,2)并且 1 在第 4 行中重复 3 次,这就是为什么列 rep 应该是1.

 data_input=data.frame(X1=c(0,1,2,1), X2=c(0,2,1,1), 
X3=c(1,2,0,1))

data_output=data.frame(X1=c(0,1,2,1),
X2=c(0,2,1,1), X3=c(1,2,0,1), rep=c(0,2,4,1))

最佳答案

这是 rowwise 的选项 - 创建 rowwise 属性,然后从行中找到 duplicated 元素,如果没有,则替换 NA4

library(dplyr)
library(tidyr)
data_input %>%
rowwise %>%
mutate(rep = {tmp <- c_across(everything())
replace_na(tmp[duplicated(tmp)][1], 4)
}) %>%
ungroup

-输出

# A tibble: 4 × 4
X1 X2 X3 rep
<dbl> <dbl> <dbl> <dbl>
1 0 0 1 0
2 1 2 2 2
3 2 1 0 4
4 1 1 1 1

上述解决方案没有考虑存在多个重复项的情况。如果有,则要么考虑创建一个 list 列,要么将 unique 元素粘贴到一个字符串中

data_input %>% 
rowwise %>%
mutate(rep = {tmp <- c_across(everything())
tmp <- toString(sort(unique(tmp[duplicated(tmp)])))
replace(tmp, tmp == "", "4")
}) %>%
ungroup

-输出

# A tibble: 4 × 4
X1 X2 X3 rep
<dbl> <dbl> <dbl> <chr>
1 0 0 1 0
2 1 2 2 2
3 2 1 0 4
4 1 1 1 1

或者使用base R

data_input$rep <- apply(data_input, 1, FUN = \(x) x[anyDuplicated(x)][1])
data_input$rep[is.na(data_input$rep)] <- 4

关于r - 如何在 R 中的行中查找重复的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70558552/

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