【发布时间】:2020-09-03 17:09:52
【问题描述】:
我需要根据以前列的多个条件和时间点创建新列。我有以下数据框:
table <- data.frame(RowID=c("A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15"), Machine=c("Ace", "Ace", "Ace", "Ame", "Ame", "Cay", "Cay", "Cay", "Cay", "Cay", "Gap", "Gap", "Dex", "Dex", "Dex"), Time=c(1,2,3,1,2,1,2,3,4,5,1,2,1,2,3), Status=c("Good", "Good", "Bad", "Bad", "Good", "Good", "Bad", "Good", "Good", "Bad", "Good", "Good", "Bad", "Bad", "Good"))
print(table)
RowID Machine Time Status
1 A1 Ace 1 Good
2 A2 Ace 2 Good
3 A3 Ace 3 Bad
4 A4 Ame 1 Bad
5 A5 Ame 2 Good
6 A6 Cay 1 Good
7 A7 Cay 2 Bad
8 A8 Cay 3 Good
9 A9 Cay 4 Good
10 A10 Cay 5 Bad
11 A11 Gap 1 Good
12 A12 Gap 2 Good
13 A13 Dex 1 Bad
14 A14 Dex 2 Bad
15 A15 Dex 3 Good
对于每台机器,时间会显示读数的时间。我想创建两个新列 Verdict 和 Outcome。对于 Verdict 列,我想为任何在“Bad”之前状态为“Good”的机器(例如 Ace 和 Cay)标记为“YES”,否则标记为“NO”。对于结果列,我想在机器第一次出现“Bad”状态时标记“Event”,在“Bad”状态出现之前将“BeforeEvent”标记为“Good”状态。对于不直接位于“Bad”之前的任何其他“Good”状态,标记为“Before”,并将第一个“Bad”状态之后的任何状态标记为“After”。
我希望得到的最终数据框如下:
table_new <- data.frame(RowID=c("A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15"), Machine=c("Ace", "Ace", "Ace", "Ame", "Ame", "Cay", "Cay", "Cay", "Cay", "Cay", "Gap", "Gap", "Dex", "Dex", "Dex"), Time=c(1,2,3,1,2,1,2,3,4,5,1,2,1,2,3), Status=c("Good", "Good", "Bad", "Bad", "Good", "Good", "Bad", "Good", "Good", "Bad", "Good", "Good", "Bad", "Bad", "Good"), Verdict=c("YES", "YES", "YES", "NO", "NO", "YES", "YES", "YES", "YES", "YES", "NO", "NO", "NO", "NO", "NO"), Outcome=c("Before", "BeforeEvent", "Event", "None", "None", "BeforeEvent", "Event", "After", "After", "After", "None", "None", "None", "None", "None"))
print(table_new)
RowID Machine Time Status Verdict Outcome
1 A1 Ace 1 Good YES Before
2 A2 Ace 2 Good YES BeforeEvent
3 A3 Ace 3 Bad YES Event
4 A4 Ame 1 Bad NO None
5 A5 Ame 2 Good NO None
6 A6 Cay 1 Good YES BeforeEvent
7 A7 Cay 2 Bad YES Event
8 A8 Cay 3 Good YES After
9 A9 Cay 4 Good YES After
10 A10 Cay 5 Bad YES After
11 A11 Gap 1 Good NO None
12 A12 Gap 2 Good NO None
13 A13 Dex 1 Bad NO None
14 A14 Dex 2 Bad NO None
15 A15 Dex 3 Good NO None
非常感谢您对此的任何帮助,因为我需要多次重复此操作,所以如果它可以自动化,那就太好了 - 谢谢!
【问题讨论】:
-
描述与数据不符。你是说 ...我想在“坏”之前为任何具有“良好”状态的机器标记“是”(例如 Ace 和 Cay),否则标记为“否”... 我们如何在带有
Bad的行上获得YES(例如A3、A7、A10)。请更准确地重新制定条件。 -
@Dan Verdict 列的目的是轻松提取具有“BeforeEvent”和“Event”的任何机器的所有行。因此,只要特定机器在“坏”状态之前具有“良好”状态,那么该机器的所有行都应标记为“是”,无论该特定机器的特定行的状态是“好”还是“坏” "。
标签: r if-statement dplyr