[英]Get the latest updated value from last non-na column
我有一个这样的 dataframe
df <- data.frame(name1 = c("a" , "a", "a", "a", "c", "c", "c", "c"),
name2 = c(NA,"a","a",NA, NA, "c", "c", NA),
name3 = c(NA, "b", "b", NA, NA, "d","d",NA))
然后,我确实根据一些条件做了一个新的专栏
library(tidyverse)
df %>% mutate(name4 = ifelse(!is.na(name3), name3, name1))
name1 name2 name3 name4
1 a <NA> <NA> a
2 a a b b
3 a a b b
4 a <NA> <NA> a
5 c <NA> <NA> c
6 c c d d
7 c c d d
8 c <NA> <NA> c
我想分别用name4
中的b
, d
替换a
, c
而不调用字符即a
, b
。 (制作另一列也是一个不错的选择,对吗?)
对此有什么建议吗?
所需 output
name1 name2 name3 name4
1 a <NA> <NA> b
2 a a b b
3 a a b b
4 a <NA> <NA> b
5 c <NA> <NA> d
6 c c d d
7 c c d d
8 c <NA> <NA> d
这里有两个可能的答案:
df <- data.frame(name1 = c("a" , "a", "a", "a", "c", "c", "c", "c"),
name2 = c(NA,"a","a",NA, NA, "c", "c", NA),
name3 = c(NA, "b", "b", NA, NA, "d","d",NA))
library(tidyverse)
df %>% mutate(name4 = ifelse(!is.na(name3), name3, name1),
name4=sub('a','b', sub('c','d',name4)))
#> name1 name2 name3 name4
#> 1 a <NA> <NA> b
#> 2 a a b b
#> 3 a a b b
#> 4 a <NA> <NA> b
#> 5 c <NA> <NA> d
#> 6 c c d d
#> 7 c c d d
#> 8 c <NA> <NA> d
df %>% mutate(name4 = ifelse(!is.na(name3), name3, name1),
name4=c('a'='b','c'='d','b'='b','d'='d')[name4])
#> name1 name2 name3 name4
#> 1 a <NA> <NA> b
#> 2 a a b b
#> 3 a a b b
#> 4 a <NA> <NA> b
#> 5 c <NA> <NA> d
#> 6 c c d d
#> 7 c c d d
#> 8 c <NA> <NA> d
由reprex package (v2.0.1) 创建于 2021-09-28
填充NA,然后使用从右到左的合并,获取name4列的最新名称:
df %>%
group_by(name1) %>%
fill(name2, name3, .direction = "downup") %>%
mutate(name4 = coalesce(name3, name2, name1))
## A tibble: 8 x 4
## Groups: name1 [2]
# name1 name2 name3 name4
# <chr> <chr> <chr> <chr>
#1 a a b b
#2 a a b b
#3 a a b b
#4 a a b b
#5 c c d d
#6 c c d d
#7 c c d d
#8 c c d d
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.