Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何在现有列中创建唯一值的数据框?_R_Dplyr_Plyr - Fatal编程技术网

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))