根据条件删除R中的重复项

时间:2018-12-31 11:15:38

标签: r if-statement duplicates

我需要在删除重复项功能中嵌入条件。我正在使用来自一个高度使用多种语言的国家/地区的南非的大型学生数据库。上周,你们给了我代码以删除由重考引起的重复,但是我现在意识到我的语言考试数据显示有些学生提供两种以上不同的语言。 简化后的原始数据看起来像这样

STUDID   MATSUBJ     SCORE
101      AFRIKAANSB   1
101      AFRIKAANSB   4
102      ENGLISHB     2
102      ISIZULUB     7
102      ENGLISHB     5

我需要的结果文件是

STUDID   MATSUBJ    SCORE  flagextra
101      AFRIKAANS   4
102      ENGLISH     5
102      ISIZULUB    7     1

我需要标记其他语言,以便我可以看到它们是什么语言,并为此创建新的类别

2 个答案:

答案 0 :(得分:0)

可能对您有帮助

library(tidyverse)
df1 %>% 
   group_by(STUDID, MATSUBJ) %>% 
   summarise(SCORE = max(SCORE), 
             flagextra = as.integer(!sum(duplicated(MATSUBJ))))
# A tibble: 3 x 4
# Groups:   STUDID [?]
#  STUDID MATSUBJ    SCORE flagextra
#   <int> <chr>      <dbl>     <int>
#1    101 AFRIKAANSB     4         0
#2    102 ENGLISHB       5         0
#3    102 ISIZULUB       7         1

或与base R

i1 <- !(duplicated(df1[1:2])|duplicated(df1[1:2], fromLast = TRUE))
transform(aggregate(SCORE ~ ., df1, max), 
          flagextra = as.integer(MATSUBJ %in% df1$MATSUBJ[i1]))

数据

df1 <- structure(list(STUDID = c(101L, 101L, 102L, 102L, 102L), MATSUBJ 
      = c("AFRIKAANSB", 
 "AFRIKAANSB", "ENGLISHB", "ISIZULUB", "ENGLISHB"), SCORE = c(1L, 
 4L, 2L, 7L, 5L)), class = "data.frame", row.names = c(NA, -5L
 ))

答案 1 :(得分:0)

对于R的新手来说,两阶段程序对我来说更好:

删除由主题重试引起的重复df <-LANGSEC%>%group_by(STUDID,MATRICSUBJ)%>%top_n(1,SUBJSCORE)#然后标记两个主题中的一个导致其余重复LANGSEC $ flagextra <-as .integer(duplicated(LANGSEC $ STUDID),LANGSEC $ MATRICSUBJ#然后过滤此第三种语言并制作新文件LANG3 <-LANGSEC%>%filter(flagextra == 1)#然后从其他文件LANG2 <-LANGSEC中删除它们%>%过滤器(!flagextra == 1)