我有以下数据框列表,每个数据框有 3 个变量(a、b 和 c)
my.list <- list(d1, d2, d3, d4)
在我的数据框中,我在“a”中有重复的字符串,我想删除具有重复值的行
我正在使用的当前代码:
my.listnew <- lapply(my.list, function(x) unique(x["a"]))
这段代码的问题是其他 2 列“b”和“c”已经消失,我想保留它们,而重复的行被删除
我有以下数据框列表,每个数据框有 3 个变量(a、b 和 c)
my.list <- list(d1, d2, d3, d4)
在我的数据框中,我在“a”中有重复的字符串,我想删除具有重复值的行
我正在使用的当前代码:
my.listnew <- lapply(my.list, function(x) unique(x["a"]))
这段代码的问题是其他 2 列“b”和“c”已经消失,我想保留它们,而重复的行被删除
用于duplicated
删除列中的重复值,a
同时保留其他列。
my.listnew <- lapply(my.list, function(x) x[!duplicated(x$a), ])
仅供参考,tidyverse 的做法-
set.seed(1)
my.list <- list(d1 = data.frame(a = sample(letters[1:3], 5, T),
b = rnorm(5),
c = rnorm(5)),
d2 = data.frame(a = sample(letters[1:3], 5, T),
b = rnorm(5),
c = rnorm(5)),
d3 = data.frame(a = sample(letters[1:3], 5, T),
b = rnorm(5),
c = rnorm(5)))
library(tidyverse)
map(my.list, ~ .x %>% filter(!duplicated(a)) )
#> $d1
#> a b c
#> 1 a 1.5952808 0.5757814
#> 2 c 0.3295078 -0.3053884
#> 3 b 0.4874291 0.3898432
#>
#> $d2
#> a b c
#> 1 b 0.2522234 0.3773956
#> 2 a -0.8919211 0.1333364
#>
#> $d3
#> a b c
#> 1 a -0.2357066 1.1519118
#> 2 c -0.4333103 -0.4295131
#> 3 b -0.6494716 1.2383041
由reprex 包于 2021-05-13 创建 (v2.0.0 )
如果您还想在输出中组合数据帧,您可以使用map_dfr
而不是map
上面
我们可以subset
在没有任何匿名函数的情况下使用
out <- lapply(my.list, subset, subset = !duplicated(a))
或data.table
与unique
library(data.table)
out <- lapply(my.list, function(dat) unique(as.data.table(dat), by = 'a'))