R 如何在现有列中创建唯一值的数据框?
我需要仅使用前一列(R 如何在现有列中创建唯一值的数据框?,r,dplyr,plyr,R,Dplyr,Plyr,我需要仅使用前一列(col.1)中与现有数据帧中另一列(col.2)中的唯一值相对应的引用来创建新数据帧(col.3) 我需要这个: df1 col.1 col.2 1 1 1 3 1 7 1 7 2 12 2 14 2 14 2 1
col.1
)中与现有数据帧中另一列(col.2
)中的唯一值相对应的引用来创建新数据帧(col.3
)
我需要这个:
df1
col.1 col.2
1 1
1 3
1 7
1 7
2 12
2 14
2 14
2 14
df2
col.3
1
1
1
2
2
我试过这个:
new.col <- cbind(df$col.1[unique(df$col.2)])
new.col我们可以使用duplicated
创建一个逻辑索引,并使用该索引对行进行子集划分
df2 <- data.frame(col3. = df$col.1[!duplicated(df$col.2)])
或者使用dplyr
,在col.2
上使用distinct
,然后选择col.1'
library(dplyr)
df %>%
distinct(col.2, .keep_all = TRUE) %>%
select(col.3 = col.1)
# col.3
#1 1
#2 1
#3 1
#4 2
#5 2
如果根据相邻元素之间的相等性考虑重复项,则使用rleid
library(data.table)
df %>%
filter(!duplicated(rleid(col.2))) %>%
select(col.3 = col.1)
如果我们转换为data.table
,unique
也有一个by
选项
library(data.table)
unique(setDT(df), by = 'col.2')[, .(col.3 = col.1)]
数据
df谢谢@akrun。由于某些原因,这仍然无法提供完整的col.1
值集。我将尝试添加一个真实的可复制示例data@JKO请检查您的值是否有尾随/前导空格(如果是字符)class@JKO另外,请使用dput
显示数据,因为它将给出您的数据结构。我不确定您的意思。我很抱歉!它确实有用!我的错误是,我也在运行我设计的代码,将col.3
与col.2
中的唯一值缝合在一起(我使用col.4获得)
library(data.table)
unique(setDT(df), by = 'col.2')[, .(col.3 = col.1)]
df <- structure(list(col.1 = c(1L, 1L, 1L, 1L, 2L, 2L, 2L), col.2 = c(1L,
3L, 7L, 7L, 12L, 14L, 14L)), class = "data.frame", row.names = c(NA,
-7L))