Сравнение значений во фрейме данных на основе столбца и, если значения отличаются, объединение их и удаление другой строки в R - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть набор данных, который выглядит примерно так:

https://i.stack.imgur.com/5W0HU.png

Я хочу сравнить все столбцы на основе «Agentdepartment». Если значения одинаковы, то возьмите его как есть, если он отличается, объедините оба значения через «/», а затем удалите нижнюю строку. В случае NA, я не хочу, чтобы они были объединены, то есть, если один столбец имеет значение NULL, а другие - не NULL, оставьте значение NULL. Если оба имеют NULL, то сохраните NULL. Поэтому я хочу по одной строке для каждого отдела. Вот как я хочу, чтобы мой последний набор данных выглядел так:

https://i.stack.imgur.com/8B819.png

Я нашел решение здесь: агрегат (. ~ Agentdepartment, df, function (x) paste0 (unique (x), collapse = "/"), na.action = na.pass). Но он также агрегирует нулевые значения.

Может кто-нибудь предложить, пожалуйста.

1 Ответ

0 голосов
/ 03 сентября 2018

Должен быть более эффективный способ, но это работает.

Agent <- read.csv("Agent.csv")
Agent
  AgentDepartment AgentId SignDate Experience
1               A     101 30-01-20          1
2               A     102 30-01-20          2
3               B     103 25-06-20          1
4               B     103 20-05-20          4
5               C     104 19-08-20          5
6               C     105     <NA>          5
7               D      NA     <NA>          6

Agent$SignDate <- as.Date(Agent$SignDate)


Agent_fixed <- Agent %>% group_by(AgentDepartment) %>% summarise( AgentId  = toString(unique(AgentId)),
                                                   SignDate = toString(na.omit(unique(SignDate))),
                                                   Experience = toString(na.omit(unique(Experience))))
Agent_fixed$SignDate[Agent_fixed$SignDate == ""] <- NA
Agent_fixed$AgentId <- gsub(", ", "/", Agent_fixed$AgentId)
Agent_fixed$SignDate <- gsub(", ", "/", Agent_fixed$SignDate)
Agent_fixed$Experience <- gsub(", ", "/", Agent_fixed$Experience)

Agent_fixed
  AgentDepartment AgentId SignDate          Experience   
1 A               101/102 30-01-20          1/2       
2 B               103     25-06-20/20-05-20 1/4       
3 C               104/105 19-08-20          5         
4 D               NA      NA                6   
...