如何在 R 中的整个数据集中删除列中的重复值
How do I remove duplicate values within a column throughout the dataset in R
数据框如下所示:
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")
如何删除列中的重复值,并对所有列重复此操作以使数据如下所示:
var_1 var_2 var_3
5 2 2
6 3 1
4
尝试 return unique 后长度不同的列表。在 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-04-15 创建
由 reprex package (v2.0.0)
于 2021-04-15 创建
这是一种方法,旋转时间更长,过滤不同的列值组合,然后展开:
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 <- 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")
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-04-15 创建
数据框如下所示:
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")
如何删除列中的重复值,并对所有列重复此操作以使数据如下所示:
var_1 var_2 var_3
5 2 2
6 3 1
4
尝试 return unique 后长度不同的列表。在 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-04-15 创建 由 reprex package (v2.0.0)
于 2021-04-15 创建这是一种方法,旋转时间更长,过滤不同的列值组合,然后展开:
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 <- 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")
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-04-15 创建