【发布时间】:2017-07-16 20:16:48
【问题描述】:
请忽略这部分看下面@从这里开始
我正在尝试合并以下两行:
像这样排成一行:
创建数据集的代码如下:
dataset <- data.frame(Environment=c("PRODUCTION","PRODUCTION"),
Green=c("Yes","No"),
Red=c("No","Yes"),
Completed=c("Yes","Yes"))
如果Environment 列具有相同的值,在这种情况下PRODUCTION 合并两行并返回“是”。我没有包含代码,因为我尝试的所有代码都不起作用。例如,这段代码负责复制:
dataset[!duplicated(dataset$Environment),]
任何帮助将不胜感激。
从这里开始 - 问题更新
我意识到我的问题并没有反映我要解决的问题。让我再试一次。这是数据集:
我希望它是这样的:
可能还有很多其他列。但是,我想要做的就是如果相同的ID 有相同的Environment 组合它们并返回Yes 如果有Yes 否则返回默认值。我希望我的措辞更好。
这是新数据集:
dataset <- data.frame(ID=c(15,15,15,16,16,16,16),Environment=c("PRODUCTION","PRODUCTION", "TRAINING",
"PRODUCTION","PRODUCTION", "TRAINING", "STAGING"),
Green=c("Yes","No", "Yes","Yes","No", "Yes", "Yes"),
Red=c("No","Yes", "No","No","Yes", "No", "No"),
Completed=c("Yes","Yes", "No","Yes","Yes", "No", "No"))
基于@P.Routh 代码,我认为我们更近了一步。我已经修改了数据集以表明静态签名会破坏代码:
dataset <- data.frame(ID=c(15,15,15,16,16,16,16),
Environment=c("PRODUCTION","PRODUCTION", "TRAINING",
"PRODUCTION","PRODUCTION", "TRAINING", "STAGING"),
Green=c("Yes","No", "Yes","Yes","No", "No", "Yes"),
Red=c("No","Yes", "No","No","Yes", "No", "No"),
White=c("No","No", "No","No","No", "No", "No"),
Black=c("No","No", "No","No","No", "No", "No"),
Completed=c("Yes","Yes", "No","Yes","Yes", "No", "No"))
@P.Routh 下面的修改代码给出了错误的输出:
df <- dataset%>%group_by(ID,Environment)%>%
mutate(total = n())%>% #this counter acts as the condition you need
unite(signature,Green,Red,White,Black,Completed,sep = ":")%>% #combines the columns into one column
mutate(dummy = "Yes:Yes:Yes:Yes:Yes")%>% #just a dummy column to faciliate in specifying the condition
mutate(new_val = ifelse(total>1,dummy,signature))%>% #this is the condition
select(-signature:-dummy)%>%
separate(new_val, c("Green","Red","White","Black","Completed"),":") #restores original output
unique(df)
【问题讨论】:
-
我们是否需要包含一个条件来检查环境是否有多个值? @LeeS
-
@P.Routh 是正确的。我意识到我的问题是缺乏的。解决方案适用于一个
Environment值。所以我一直在努力修改问题,请参见上文。 -
请看看我的解决方案是否有效
-
@P.Routh.. 我看到了。我不得不散步以摆脱看屏幕。我现在正在测试它。
-
感谢@P.Routh 和其他所有人
标签: r