r - group_by 并使用条件将代码应用于组中的每个元素
问题描述
我有这样的数据:
ID membership AdultChild
1 1 A
2 1 A
3 2 A
4 2 C
5 2 C
6 3 A
7 3 A
: : :
我想按成员资格分组并在计算AdultChild变量后应用“代码”,即
ID membership AdultChild code
1 1 A x1
2 1 A x1
3 2 A x2
4 2 C x2
5 2 C x2
6 3 A x1
7 3 A x1
: : : :
我将有类似的条件:
count <- function(x){
if(sum(x == "A") == 2 && sum(x == "C") == 0){
code <<- x1
}else if (sum(x == "A") == 1 & sum(x == "C") >= 1){
code <<- x2
}else {
code <<- X3
}
我尝试使用 dplyr 进行分组和变异,使用上面的函数添加一个名为code的新变量。我也考虑过使用聚合函数,但运气不佳。
df.2 <- df %>% group_by(membership)
%>% mutate(n = count(AdultChild)) %>%
ungroup()
df.2 <- aggregate.data.frame(df, by = membership, FUN =
count(df$AdultChild))
基本上,我想要一个新变量,它使用某些条件决定并在按成员资格分组时应用于每个 ID。
提前致谢。
解决方案
count <- function(x){
if(sum(x == "A", na.rm = T) == 2 & sum(x == "C", na.rm = T) == 0){
y <- "4"
} else if (sum(x == "A", na.rm = T) > 2 & sum(x == "C", na.rm = T) == 0){
y <- "5"
}else if (sum(x == "A", na.rm = T) == 1 & sum(x == "C", na.rm = T) >= 1){
y <- "6"
}else if (sum(x == "A", na.rm = T) == 2 & sum(x == "C", na.rm = T) <= 3 & sum(x == "C", na.rm = T) >= 1){
y <- "7"
}else {
y <- "8"
}
}
df.2 <- df %>% group_by(membership) %>% mutate(code = count(AdultChild)) %>% ungroup()
推荐阅读
- python - 在 Pandas 中从 csv 创建硬编码数据框?
- r - 使用数据透视表类型的重新格式化将数据表重新格式化(重塑)为时间序列 - 将级别添加到变量名称
- javascript - 通过通过 Tealium 集成的 Javascript 向 hotjar 录音添加标签
- c# - Blazor WAsm - 无法调用返回值的 JS 函数
- paypal - PayPal 忽略订阅“notify_url”并使用配置文件端点代替即时支付通知 (IPN)
- apache-spark - 如何解释 Spark ui 中某个阶段的详细信息图
- laravel - php artisan migrate throws 收到对 SSL 协商的无效响应
- java - java.net.SocketException:在 Selenium driver.close() 或 driver.quit() 语句上重置连接
- r - 存储使用magick并行处理的图像的输出
- r - 试图产生一个循环来总结 R 中的连续列值