我有一个数据集,看起来像这样:
https://i.stack.imgur.com/5W0HU.png
我想根据“代理部门”比较所有列。如果值相同,则按原样提取,如果不同,则通过“/”连接两个值,然后删除下行。对于NA,我不希望它们合并,即如果一列为Null而另一列为非空,则保留非空值。如果两者都为NULL,则保留NULL。所以我希望每个部门都有一行。这就是我希望最终数据集的样子:
https://i.stack.imgur.com/8B819.png
我在这里找到了一个解决方案:聚合(.~Agent部门,df,函数(x)paste0(唯一(x),崩溃 = "/"), na. action=na.pass)。但它也在聚合空值。
有人能建议吗?
应该有更有效的方法,但这行得通。
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