R 如何在列中运行unique以确保它保持行的升序

R 如何在列中运行unique以确保它保持行的升序,r,R,我有一个观察月(升序)列以及一个帐号列。我想运行一个unique/distinct,其中我想要唯一的帐号,但要确保R所采用的行按观察月的升序排列 Observation month A/C num 2010-09 abc1 2010-10 abc1 2010-11 xyz 我希望unique只过滤出第一行作为升序 我想在我的帐号列中运行一个唯一的,这样我就可以得到每个帐号的第一个条目 df

我有一个观察月(升序)列以及一个帐号列。我想运行一个unique/distinct,其中我想要唯一的帐号,但要确保R所采用的行按观察月的升序排列

   Observation month A/C num

2010-09                 abc1
2010-10                 abc1
2010-11                  xyz
我希望unique只过滤出第一行作为升序 我想在我的帐号列中运行一个唯一的,这样我就可以得到每个帐号的第一个条目

df <- read.table(text = "Observation_month A_C_num
                 2010-09                 abc1
                 2010-10                 abc1
                 2010-11                  xyz", header = T)

df_correct_order <- df[order(df$Observation_month), ]
df_without_duplicates <- df_correct_order[!duplicated(df_correct_order$A_C_num), ]
df_without_duplicates

> df_without_duplicates
  Observation_month A_C_num
1           2010-09    abc1
3           2010-11     xyz
OP要求:

我希望unique只过滤出第一行,作为它的升序 订单我想在我的账号栏中运行一个唯一的,以便 每个帐户的第一个条目

这可以转换为聚合任务

显示每个账号的第一个观察月,即最小观察月

dplyr
图书馆(dplyr) DF%>% 分组依据(A.C.num)%>% 总结(观察月=min(观察月))

资料
库(data.table)

DF可能是重复的,可能不是。我想在我的帐户中运行一个unique/distinct,但我希望unique/distinct以升序为我提供第一个条目,就像我希望每个帐户的第一个条目一样。先订购,然后删除重复项。订购帐号无法解决问题。我知道,但如果您相应地拆分问题,您可以合并已回答的问题(这在编码时总是一个很好的方法)。找到下面的组合解决方案。这是否意味着duplicates总是返回第一个唯一值,即我的观察月列已按“顺序”排列.
duplicated
返回一个向量
TRUE
FALSE
,指示它是否重复。因此,第一次出现的值是
FALSE
,因为到目前为止还没有看到,所以所有其他相同的值都是
TRUE
。您希望保留所有非重复值,因此
!duplicated()
。它总是从顶部开始,除非您指示它应该从底部开始(
fromLast=TRUE
)。阅读
?复制的
,了解更多信息。库(dplyr)df%%>%排列(观察月)%%>%不同(A_C_num,.keep_all=T)这不起作用。不同的数字不是按观察月的升序排列的。我从上面的例子中得到了与
df\u完全相同的输出,没有重复项。顺序正确吗?@alisha,请更新你的问题并显示预期的结果。从你的问题和对两个答案的评论来看,不清楚你是一个什么样的人之后。但这里我们没有删除重复项或过滤掉唯一项。@Alisha我不理解您的观点。结果是否与Tino的结果相同?是否可能您的样本数据集不代表您的生产数据,或者您还没有披露其他要求?
library(dplyr)
df %>% arrange(Observation_month) %>% distinct(A_C_num, .keep_all = T)
# A tibble: 2 x 2
  A.C.num Observation.month
    <chr>             <chr>
1    abc1           2010-09
2     xyz           2010-11
library(data.table)
setDT(DF)[, .(Observation.month = min(Observation.month)), by = A.C.num]
   A.C.num Observation.month
1:    abc1           2010-09
2:     xyz           2010-11
library(data.table)
DF <- fread(
  "   Observation.month A.C.num
2010-09                 abc1
2010-10                 abc1
2010-11                  xyz")