如何解决按位置将值转换为缺失值
在数据集中,我需要将 value
列中的值转换为缺失值,有两种情况:
- 如果按类型分组,则该行为最后一行
- 如果按类型分组,下一行是缺失值
这解决了第一部分:
toy %>%
group_by(type) %>%
mutate(value = ifelse(row_number()==max(row_number()),NA,value))
我该如何处理第二个?提前致谢
toy <- data_frame(type=c(rep("A",4),rep("B",4)),year=rep(c(1:4),2),value=c(1,1,1))
# A tibble: 8 x 3
type year value
<chr> <int> <dbl>
1 A 1 1
2 A 2 1
3 A 3 NA
4 A 4 1
5 B 1 1
6 B 2 1
7 B 3 1
8 B 4 1
expected <- data_frame(type=c(rep("A",NA))
type year value
<chr> <int> <dbl>
1 A 1 1
2 A 2 NA
3 A 3 NA
4 A 4 NA
5 B 1 1
6 B 2 1
7 B 3 1
8 B 4 NA
解决方法
使用 lead
可以组合两个条件:
library(dplyr)
toy %>%
group_by(type) %>%
mutate(value = replace(value,is.na(lead(value)),NA)) %>%
ungroup
# type year value
# <chr> <int> <dbl>
#1 A 1 1
#2 A 2 NA
#3 A 3 NA
#4 A 4 NA
#5 B 1 1
#6 B 2 1
#7 B 3 1
#8 B 4 NA
lead
将给出下一个值,如果它是 NA
,我们将当前值更改为 NA
。此外,lead
默认返回最后一个值 NA
,因此第一个条件 (If grouping by type,the line is the last line
) 会自动满足。
同样可以用 data.table
解决:
library(data.table)
setDT(toy)[,value := replace(value,is.na(shift(value,type = 'lead')),NA),type]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。