R 在d中的每列中仅查找唯一值
我有下面的数据帧df1。(编辑为在数据框中具有不同数量的重复值。) 我想得到一个df2,它只具有来自每个列“x”、“y”和“z”的唯一值。R 在d中的每列中仅查找唯一值,r,R,我有下面的数据帧df1。(编辑为在数据框中具有不同数量的重复值。) 我想得到一个df2,它只具有来自每个列“x”、“y”和“z”的唯一值。 我试过: TIBLES不能有行名,因此它会在数据中创建一个新列。您可以删除第一列,然后在所有列上使用unique library(dplyr) df1$...1 <- NULL df1 %>% summarise(across(.fns = unique)) # x y z # <dbl> <dbl&
我试过:
TIBLES不能有行名,因此它会在数据中创建一个新列。您可以删除第一列,然后在所有列上使用
unique
library(dplyr)
df1$...1 <- NULL
df1 %>% summarise(across(.fns = unique))
# x y z
# <dbl> <dbl> <dbl>
#1 5 2 6
#2 10 6 2
#3 20 8 1
#4 25 10 8
库(dplyr)
df1$…1%摘要(跨(.fns=unique))
#x y z
#
#1 5 2 6
#2 10 6 2
#3 20 8 1
#4 25 10 8
或在R基中:
df2 <- data.frame(sapply(df1, unique))
df2可能值得一提的是,虽然这适用于给定的样本数据,但它依赖于每列中有相同数量的重复项。否则,它将尝试(并失败)创建具有不同列长度的df,您将需要使用不同的数据结构。当我在一列中有不同数量的重复值时,该值似乎会再次重复自身。有什么方法可以克服它吗?@kaix请参阅更新的答案,使其适用于不同数量的唯一值。如评论中所述,当每列具有不同数量的唯一值时,该怎么办?请举例说明你的期望。
>df2
x y z
5 2 6
10 6 2
20 10 1
25 8
library(dplyr)
df1$...1 <- NULL
df1 %>% summarise(across(.fns = unique))
# x y z
# <dbl> <dbl> <dbl>
#1 5 2 6
#2 10 6 2
#3 20 8 1
#4 25 10 8
df2 <- data.frame(sapply(df1, unique))
tmp <- lapply(df1, unique)
data.frame(sapply(tmp, `[`, 1:max(lengths(tmp))))
# x y z
#1 5 2 6
#2 10 6 2
#3 20 10 1
#4 25 NA 8