微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 R 中的整个数据集中删除列中的重复值

如何解决如何在 R 中的整个数据集中删除列中的重复值

数据框如下所示:

 for (int i = 0; i != number_of_employees; i++)
    {
        cout << endl;
        employees >> printing;
        cout << printing << " ";
        employees >> printing;
        cout << printing << "\t  ";
        employees >> printing;
        cout << printing << "\t\t";
        employees >> printing;
        cout << printing << "\t\t";
        employees >> printing;
        cout << printing;
        cout << endl;
    }

数据输入

        var_1 var_2 var_3
        5     2     2
        5     2     1
        6     3     4

如何删除列中的重复值,并对所有列重复此操作,使数据看起来像:

data <- structure(list(var_1 = c(5L,5L,6L),var_2 = c(2L,2L,3L),var_3 = c(2L,1L,4L)),row.names = c(NA,-3L),class = "data.frame")

解决方法

这是一种方法,旋转更长的时间,过滤不同的列值组合,然后展开:

library(tidyverse)
df %>%
  pivot_longer(cols = everything()) %>%
  distinct(name,value) %>%
  group_by(name) %>%
  mutate(row = row_number()) %>%
  ungroup() %>%
  pivot_wider(names_from = name,values_from = value)

结果

# A tibble: 3 x 4
    row var_1 var_2 var_3
  <int> <int> <int> <int>
1     1     5     2     2
2     2     6     3     1
3     3    NA    NA     4

如果你想要不同数字的总和,你可以添加为最后一行:

%>% summarize(across(-row,~sum(.,na.rm = TRUE)))

结果:

# A tibble: 1 x 3
  var_1 var_2 var_3
  <int> <int> <int>
1    11     5     7
,

尝试在唯一后返回不同长度的列表。在 data.frame 中,您总是需要它们的长度相等,并填充 NA

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter,lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect,setdiff,setequal,union
library(purrr)
data <- structure(list(var_1 = c(5L,5L,6L),var_2 = c(2L,2L,3L),var_3 = c(2L,1L,4L)),row.names = c(NA,-3L),class = "data.frame")

# get unique lsit
map(data,unique)
#> $var_1
#> [1] 5 6
#> 
#> $var_2
#> [1] 2 3
#> 
#> $var_3
#> [1] 2 1 4

# get unique & sum in one take
map(data,function(x) { sum(unique(x)) })
#> $var_1
#> [1] 11
#> 
#> $var_2
#> [1] 5
#> 
#> $var_3
#> [1] 7

如果只需要计算唯一值的总和,则带有汇总的简短版本

# if all you need is the sum of unique value then you can just do this
data %>%
  summarize(across(.fns = function(x) { sum(unique(x)) }))
#>   var_1 var_2 var_3
#> 1    11     5     7

reprex package (v2.0.0) 于 2021 年 4 月 15 日创建reprex package (v2.0.0) 于 2021 年 4 月 15 日创建

,

基础

data <- structure(list(var_1 = c(5L,class = "data.frame")




tmp <- sapply(data,unique)

res <- sapply(tmp,"length<-",max(lengths(tmp)))
res
#>      var_1 var_2 var_3
#> [1,]     5     2     2
#> [2,]     6     3     1
#> [3,]    NA    NA     4
colSums(res,na.rm = T)
#> var_1 var_2 var_3 
#>    11     5     7

reprex package (v2.0.0) 于 2021 年 4 月 15 日创建

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。