【发布时间】:2018-08-06 20:05:46
【问题描述】:
我有一个这样的数据框:
ID <- c(1,2,3,4,5,5,5,6,6)
States <- c(NA,NA,"All Locked","All Not Locked","All Locked","All Locked"
,"All Not Locked","All Not Locked","All Not Locked")
ToolID <- c(NA,NA,"SWP","SWP","SWP","SWP","SWP","SWP","SWP")
Measurement <- c("Length","Breadth","Width","Height","Time","Time"
,"Time","Mass","Mass")
Location <- c("US","US","UK","UK","US","US","US","UK","UK")
df1 <- data.frame(ID,States,ToolID,Measurement,Location)
我正在尝试使用以下条件对此数据框进行一些数据操作
For each ID (grouped),
if States = NA, then the Status = "No Status"
if States column contains at least(count >=) 1 "All Locked", then the Status = "Lock Status"
if States column doesn't contain (count =0) "All Locked", then the Status = "No Lock Status"
我想要的输出是
ID ToolID Measurement Location Status
1 NA Length US No Status
2 NA Breadth US No status
3 SWP Width UK Lock Status
4 SWP Height UK No Lock Status
5 SWP Time US Lock Status
6 SWP Mass UK No Lock Status
我正在尝试这样做,但逻辑错误
df1$Status <- ifelse(df1$States == NA, "No Status",
ifelse((count(df1$States == "All Locked") >=1),
"Lock Status",
ifelse((count(df1$States == "All Locked") <1),
"No Lock Status", NA)))
有人能指出我正确的方向吗?我想申请我更大的数据集,所以一个快速的解决方案会对我有很大帮助。
【问题讨论】:
-
看起来您想要汇总输出而不是变异。所以在
ungroup后面加上distinct -
我已经对您的代码示例做了不同的处理,但是根据逻辑,当我只需要 1 行时,它返回 2 行 id =5。请在下面查看我对您的解决方案的评论。
-
删除行的逻辑不清楚
-
请说明您想要的 ToolID 5 输出;它有 2/3 的锁定状态;根据您最后一个
ifelse(..., NA)的意图,它应该给Status=NA?不是“全部锁定”。看我的回答。
标签: r dataframe dplyr data.table tidyverse