r - R - 绑定来自某些列和选定行的值并在组内替换它们
问题描述
我想创建一个名为的新变量,Var3
它结合了. 我的数据按(长格式)分组。在任何行(例如 ID 3)中没有 1 on 的情况下,应该有 NA's on 。Year
Month
Var1 == 1
ID
Var1
Var3
df <- read.table(text=
"ID Var1 Year Month
1 0 2008 2
1 0 2009 2
1 0 2010 2
1 0 2011 2
1 1 2013 2
1 0 2014 10
2 0 2008 2
2 0 2010 2
2 1 2011 2
2 0 2013 2
2 0 2015 11
3 0 2010 2
3 0 2011 2
3 0 2013 2
3 0 2015 11
3 0 2017 10", header=TRUE)
我的预期结果是这样的:
df <- read.table(text=
"ID Var1 Year Month Var2
1 0 2008 2 20132
1 0 2009 2 20132
1 0 2010 2 20132
1 0 2011 2 20132
1 1 2013 2 20132
1 0 2014 10 20112
2 0 2008 2 20112
2 0 2010 2 20112
2 1 2011 2 20112
2 0 2013 2 20112
2 0 2015 11 20112
3 0 2010 2 NA
3 0 2011 2 NA
3 0 2013 2 NA
3 0 2015 11 NA
3 0 2017 10 NA",header=TRUE)
我试图弄清楚如何使用dplyr
. 我很新,tidyverse
因此任何建议都非常受欢迎。我已经发现我必须使用group_by(ID)
并且可能mutate
创建新变量。有人可以帮帮我吗?
解决方案
一种可能的解决方案dplyr
是
df %>%
group_by(ID) %>%
mutate(Var3 = ifelse(Var1 == 1, paste0(Year, Month), NA)) %>%
mutate(Var3 = max(Var3, na.rm = TRUE))
它背后的想法是:首先,将Year
和Month
where粘贴在一起Var1 == 1
,然后在每个组Var3
中,使用诸如max
(但也可以是min
)删除 NA 值的函数传播唯一存在的值。
输出
# A tibble: 16 x 5
# Groups: ID [3]
ID Var1 Year Month Var3
<int> <int> <int> <int> <chr>
1 1 0 2008 2 20132
2 1 0 2009 2 20132
3 1 0 2010 2 20132
4 1 0 2011 2 20132
5 1 1 2013 2 20132
6 1 0 2014 10 20132
7 2 0 2008 2 20112
8 2 0 2010 2 20112
9 2 1 2011 2 20112
10 2 0 2013 2 20112
11 2 0 2015 11 20112
12 3 0 2010 2 NA
13 3 0 2011 2 NA
14 3 0 2013 2 NA
15 3 0 2015 11 NA
16 3 0 2017 10 NA
推荐阅读
- tensorflow.js - 分类器输出错误
- variables - Fortran 中的变量识别问题
- python - 在 Django 中间件中获取表单数据
- android - 基于其子元素的可扩展背景图像
- c# - 实体框架核心 FromSQL 抛出 ArgumentNullException
- android - 在 SDK 中授予对 Activity UI 的控制权
- c++ - 哈希表 C++ 字符串
- angular-material - 如何使用角度材料中的自定义指令验证输入表单字段并显示错误?
- pattern-matching - Elixir 复杂模式匹配顺序
- jquery - 如何在 AEM Touch UI Dialog 中找到组件路径?