[英]Conditionally fill empty cells
我有一個缺少某些值的命名向量:
x = c(99, 88, 1, 2, 3, NA, NA)
names(x) = c("A", "C", "AA", "AB", "AC", "AD", "CA")
第二個數據框反映了層次結構的命名結構(例如,A是AA,AB和AC的上級)
filler = data.frame(super = c("A", "A", "A", "A", "C"), sub = c("AA", "AB", "AC", "AD", "CA"))
如果x中缺少一個值,我想用fill的上級填充它。 這樣的結果是
x = c(99, 88, 1, 2, 3, 99, 88)
有人有任何聰明的方法可以做到這一點,而又不會無所適從嗎?
我們可以基於NA
元素創建邏輯向量('i1'),獲取具有match
'filler'中匹配元素的索引,然后進行賦值
i1 <- is.na(x)
x[i1] <- x[match(filler$super[match(names(x[i1]), filler$sub)], names(x))]
as.vector(x)
#[1] 99 88 1 2 3 99 88
由於x
是命名向量,我們可以將其轉換為數據幀( enframe
),然后進行enframe
,將NA
值替換為對應的value
並在需要時再次將其轉換為向量。 ( deframe
)。
library(dplyr)
library(tibble)
enframe(x) %>%
left_join(filler, by = c("name" = "sub")) %>%
mutate(value = if_else(is.na(value), value[match(super, name)], value)) %>%
select(-super) %>%
deframe()
# A C AA AB AC AD CA
#99 88 1 2 3 99 88
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.