我有一个看起来像这样的数据集:
https://i.stack.imgur.com/5W0HU.png
我想比较基于“ Agentdepartment”的所有列。如果值相同,则按原样拾取;如果值不同,则通过'/'将两个值连接起来,然后删除下一行。在不适用NA的情况下,我不希望它们被合并,即如果一列具有Null值而其他非null值,则保留该非null值。如果两者都具有NULL,则保留NULL。所以我希望每个部门都有一行。这就是我希望最终数据集的样子:
https://i.stack.imgur.com/8B819.png
我在这里找到了解决方案: 集合(。〜Agent部门,df,函数(x)paste0(唯一(x),折叠=“ /”),na.action = na.pass)。但是它也在聚合Null值。
任何人都可以建议。
答案 0 :(得分:0)
应该有一种更有效的方法,但这可行。
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