如何解决如何在 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 举报,一经查实,本站将立刻删除。