如何解决仅选择最大数量并重新编码最大,并在数据框中将其他字段保留为空白,并使用多个变量的多个条件重新编码
我正在尝试为每个组中的行选择最大数目,并将该数目重新编码为“ Last”,并将其他数字保留为空白(在数据框下方:新变量名称为“ Z”)。之后,我想创建具有与其他变量相对应的多个条件的新变量(在数据框下方:新变量名称为“ X”)。
数据框为:
ID = c(1,1,2,3,4,4)
Care = c("Yes","Yes","No","No")
Y = c(1,2)
Z = c("","","Last","Last")
X = c("","Always","Lost","Linked","Never")
df <- data.frame(ID,Care,Y,Z,X)
df
我可以使用以下代码创建Y:
main <- df %>% group_by(ID) %>% mutate(Y = row_number())
但是,我想在数据框中创建新的变量“ Z”和“ X”。如果每个组内的所有行中的关注为“是”,则为X;如果每个组中的所有行中的关注为“否”,则为X =从不,如果较早时的关注为“是”,而最后一个则为“丢失”,则为“关注”早些时候是或否,但最后一次是=“已链接”
这里我可以创建Z变量(仍然需要创建X):
main %>% group_by(ID) %>% mutate(Z=row_number()>=which.max(Y))
我已经为此苦了一段时间了。任何帮助将不胜感激!
解决方法
容易! :)
您可以节省使用which.max(Y)
的步骤,而只需将每个组中的row_number()
与n()
进行比较。
创建Z
只是一个简单的ifelse
陈述,我认为在创建X
时给您带来的一些麻烦可以通过case_when()
解决,以解决您描述的四种情况。首先,检查组中的all()
观察是否符合您的“是”或“否”的条件,然后再检查两个“混合”情况。
这是您要寻找的:
library(dplyr)
df <- tibble(
ID = c(1,1,2,3,4,4),Care = c("Yes","Yes","No","No")
)
df2 <- df %>%
group_by(ID) %>%
mutate(
Z = ifelse(row_number() == n(),"Last",""),X = case_when(
Z == "" ~ "",all(Care == "Yes") ~ "Always",all(Care == "No") ~ "Never",Care == "Yes" ~ "Linked",Care == "No" ~ "Lost"
)
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。