R-根据id填充空白值
小问题:我想根据R-根据id填充空白值,r,dplyr,R,Dplyr,小问题:我想根据id的分组填充id2的值 由此 > head(dta) id id2 1 B10388W4 0 2 B10388W4 B10388W 3 B10388W4 B10388W 简单地说 id id2 1 B10388W4 B10388W 2 B10388W4 B10388W 3 B10388W4 B10388W 基于组id填充值的整洁方式是什么 我想到了类似的事情 dta %>% group_by(id) %>%
id
的分组填充id2
的值
由此
> head(dta)
id id2
1 B10388W4 0
2 B10388W4 B10388W
3 B10388W4 B10388W
简单地说
id id2
1 B10388W4 B10388W
2 B10388W4 B10388W
3 B10388W4 B10388W
基于组id
填充值的整洁方式是什么
我想到了类似的事情
dta %>%
group_by(id) %>%
mutate( id3 = ifelse(id2 == 0, lead(id2), id2) )
但它并不那么聪明,因为在其他地方可以找到一些0,它们具有相同的id
欢迎任何意见
数据
dta = structure(list(id = c("B10388W4", "B10388W4", "B10388W4"),
id2 = c("0", "B10388W", "B10388W")), row.names = c(NA, -3L),
class = "data.frame", .Names = c("id", "id2"))
对于每个id
(组),您可以使用唯一的id2
值,该值不是0
,并更新id2
列。这假设对于每个唯一的id
值,只有一个唯一的id2
值,也可能有一个0
值
# my example dataset
dt = data.frame(id = c("B10388W4","B10388W4","B10388W4","A10388W4","A10388W4","A10388W4"),
id2 = c(0,"B10388W","B10388W","A10388W",0,0),
stringsAsFactors = F)
dt
# id id2
# 1 B10388W4 0
# 2 B10388W4 B10388W
# 3 B10388W4 B10388W
# 4 A10388W4 A10388W
# 5 A10388W4 0
# 6 A10388W4 0
library(dplyr)
dt %>%
group_by(id) %>%
mutate(id2_new = unique(id2[id2 != 0])) %>%
select(-id2) %>%
ungroup
# id id2_new
# (chr) (chr)
# 1 A10388W4 A10388W
# 2 A10388W4 A10388W
# 3 A10388W4 A10388W
# 4 B10388W4 B10388W
# 5 B10388W4 B10388W
# 6 B10388W4 B10388W
您可以将零转换为
NA
s,然后使用zoo::NA.locf
或者您可以使用unique(id2[id2!=0])
来填充,而不是lead(id2)
或类似的东西。您有什么理由更喜欢do
而不是mutate
?似乎mutate(id2_new=unique(id2[id2!=0]))
会达到预期的效果。do
会使事情变得过于复杂。我不知道为什么我没有在这里使用明显的mutate
。将更新。感谢@aosmith的评论。
dta %>%
filter(id2 != 0) %>%
distinct %>%
full_join(dta %>% select(id1) )