【问题标题】:subsetting the first row of each element in a variable [duplicate]对变量中每个元素的第一行进行子集化[重复]
【发布时间】:2016-07-24 14:41:04
【问题描述】:

我有这个数据集如下所示

Name ID DATES R 1 @0CC 71476 20000704 11 2 @0CC 71476 20001204 11 3 @0RM 49960 20000131 2 4 @0RM 73565 20000919 1 5 @0RM 59451 20001023 1 6 @0RM 44457 20001214 1 7 @0TL 48061 20000627 31 8 @0TL 19824 20000929 3 9 @0TL 70970 20001211 1 10 @0TL 73862 20001212 2 11 @0TL 48061 20001227 31 12 @1AJ 58875 20001214 1 13 @1AJ 56014 20001214 3 14 @1AJ 47340 20001214 3 15 @1AJ 19813 20001214 3 16 @1AL 44416 20000303 31 17 @1AL 59184 20000413 323 18 @1AL 44416 20000517 31 19 @1AL 52718 20000621 1 20 @1AL 59184 20000707 323 21 @1AL 59184 20000801 323 22 @1AL 72832 20001127 43 23 @1AL 73568 20001130 3 24 @1AL 72832 20001211 43 25 @1FF 58781 20000719 1 26 @1FF 44505 20000801 12 27 @1FF 73559 20001110 1 28 @1FF 44505 20001218 12 29 @1FF 47276 20001227 3

我想要做的是,对于每个唯一名称和每个唯一 ID,我想创建这个数据框的一个子集,例如

Name ID DATES R 1 @0CC 71476 20000704 11 3 @0RM 49960 20000131 2 4 @0RM 73565 20000919 1 5 @0RM 59451 20001023 1 6 @0RM 44457 20001214 1 7 @0TL 48061 20000627 31 8 @0TL 19824 20000929 3 9 @0TL 70970 20001211 1 10 @0TL 73862 20001212 2 12 @1AJ 58875 20001214 1 13 @1AJ 56014 20001214 3 14 @1AJ 47340 20001214 3 15 @1AJ 19813 20001214 3 16 @1AL 44416 20000303 31 17 @1AL 59184 20000413 323 19 @1AL 52718 20000621 1 22 @1AL 72832 20001127 43 23 @1AL 73568 20001130 3 25 @1FF 58781 20000719 1 26 @1FF 44505 20000801 12 27 @1FF 73559 20001110 1 29 @1FF 47276 20001227 3

我正在考虑使用两个 for 循环

for(i in unique(noanalysttest$IBTKR2)){
for(j in unique(noanalysttest$AMASKCD)){
R2<-subset(DT)
}
R2

但这并没有给我正确的解决方案。非常感谢您的帮助。

谢谢!

【问题讨论】:

  • @Frank 感谢您指出重复,我正在阅读该线程并且我尝试了 df1[!duplicated(df1[c("Name", "ID")]),] 没有工作,但 unique(setDT(df1), by = c("Name", "ID")) 在查看 @akrun 解决方案后可以。非常感谢您的帮助。

标签: r subset uniqueidentifier


【解决方案1】:

我们可以使用dplyr中的slice,在按“姓名”和“ID”分组后

library(dplyr)
df1 %>% 
    group_by(Name, ID) %>%
    slice(1)

或者base R 选项将是

df1[!duplicated(df1[c("Name", "ID")]),]

或使用data.table

library(data.table)
unique(setDT(df1), by = c("Name", "ID"))

或者按照@Frank 的建议

setDT(df1)[, .SD[1L], by = .(Name, ID)]

【讨论】:

  • @Frank 是吗,我认为它更快。感谢您的提示
  • 非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 2019-02-21
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多