I have a data frame test:
Test <- data.frame( Number = c(1,2,3), Item = c("Sars-Cov","Influenza","Unknown Flu"))
# Number Item
# 1 1 Sars-Cov
# 2 2 Influenza
# 3 3 Unknown Flu
Then, after adding two elements "Influenza" it becomes:
Test2 <- data.frame( Number = c(1,2,3,"N.a","N.a"), Item = c("Sars-Cov","Influenza","Unknown Flu","Influenza","Influenza"))
# Number Item
# 1 1 Sars-Cov
# 2 2 Influenza
# 3 3 Unknown Flu
# 4 N.a Influenza
# 5 N.a Influenza
Which code should I use to column number turns to a result like this?:
Test3 <- data.frame( Number = c(1,2,3,2,2), Item = c("Sars-Cov","Influenza","Unknown Flu","Influenza","Influenza"))
# Number Item
# 1 1 Sars-Cov
# 2 2 Influenza
# 3 3 Unknown Flu
# 4 2 Influenza
# 5 2 Influenza
Actually I have an Item list larger than this example with different elements that I want to be recognized in order of appearence as intergers.
You can use fill()
from tidyr
.
library(dplyr)
library(tidyr)
Test2 %>%
mutate(Number = na_if(Number, "N.a")) %>%
group_by(Item) %>%
fill(Number, .direction = "downup")
# Number Item
# <chr> <chr>
# 1 1 Sars-Cov
# 2 2 Influenza
# 3 3 Unknown Flu
# 4 2 Influenza
# 5 2 Influenza
Or by match()
:
Test2 %>%
mutate(Number = na_if(Number, "N.a"),
Number = {
ind <- is.na(Number)
replace(Number, ind, Number[!ind][match(Item[ind], Item[!ind])])
})
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.