r - 如果条件满足,则在下一行中分配值,并保持其他值相同
问题描述
这是我拥有的数据
structure(list(id = c(1, 1, 1, 1, 1), columnA = c("2011/01/01",
"2013/01/01", "2014/01/01", "2015/01/01", "2015/01/10"), columnB = c("NA",
"2013/01/01", "2013/01/02", "2014/01/01", "NA")), row.names = c(NA,
5L), class = "data.frame")
这就是我想要的
structure(list(id = c(1, 1, 1, 1, 1), A = c("2011/01/01", "2013/01/01",
"2014/01/01", "2015/01/01", "2015/01/10"), B = c("NA", "2013/01/02",
"NA", "2014/01/01", "NA")), row.names = c(NA, 5L), class = "data.frame")
基本上,我希望 columnA 和 columnB 中的值相等,然后从同一列中的第 -1 行调出值,并插入一个 NA 代替该列上的值。我试过这个
`library(dplyr)
data %>%
group_by(id) %>%
mutate(columnB = case_when(is.na(columnB) ~ NA_character_,
columnA == columnB ~ lead(columnB))) %>%
ungroup
`
问题是它将列B中的所有其他值也转换为NA。我希望 A 和 B 中的值不等于保持不变并且不转换为 NA。
解决方案
library(dplyr)
df %>%
mutate(columnB = case_when(columnA == columnB ~ lead(columnB),
lag(columnA) == lag(columnB) ~ NA_character_,
T ~ columnB))
输出
id columnA columnB
1 1 2011/01/01 NA
2 1 2013/01/01 2013/01/02
3 1 2014/01/01 <NA>
4 1 2015/01/01 2014/01/01
5 1 2015/01/10 NA
推荐阅读
- mysql - 我有一个类似于以下的表格。我想要不同状态的单独计数可用
- digital-signature - WSS4j - WS 客户端拦截器:缺少数字签名
- ios - 静态库与动态框架的 iOS 应用程序大小
- spring-boot - Spring Boot 2 Jersey 实现不起作用
- python - Python:验证csv是否只有一列,否则抛出错误
- python - 在 Python 中的 Pandas 日期时间列中添加记录
- database-administration - SQL Server 无响应,但 SSMS 和 RDP 连接有效
- javascript - 新日期作为反应关键道具?
- python - tkinter python图标不会显示在窗口中
- c# - 带有 HttpWebRequest POST 的 WSDL?