我有一个逐行产品数据的数据框架,包括子文章。现在我想把某些值(列)从父节点转移到所有的子节点。
的例子:
data.frame(sku = c("V1000837", "V1000837-001", "V1000837-002", "01549831"),
height = c(10, 12, NA, 50),
width = c(15, NA, 15, 150),
color = c("red", "blue", "green", "black"),
power = c("12W", NA, NA, "130W"))
sku height width color power
V1000837 10 15 red 12W
V1000837-001 12 NA blue <NA>
V1000837-002 NA 15 green <NA>
01549831 50 150 black 130W
现在我想将父文章(以V开头,不以"-d{3}"结束)的列值接管给所有子文章(以V开头,以"-d{3}"结束)。
我只想接管">power列的值";宽度和">";从父亲到相关的孩子。
结果应该是这样的:
sku height width color power
V1000837 10 15 red 12W
V1000837-001 12 15 blue 12W
V1000837-002 NA 15 green 12W
01549831 50 150 black 130W
不幸的是,我没有办法。谢谢你的帮助。
可以将"-"
上的数据分成不同的列。按父(父)值和fill
、power
、width
列分组。您可以重新设置unite
。
library(dplyr)
library(tidyr)
df %>%
separate(sku, c('father', 'child'), sep = '-', fill = 'right') %>%
group_by(father) %>%
fill(power, width, .direction = 'updown') %>%
ungroup %>%
unite(sku, father, child, na.rm = TRUE, sep = '-')
# sku height width color power
# <chr> <dbl> <dbl> <chr> <chr>
#1 V1000837 10 15 red 12W
#2 V1000837-001 12 15 blue 12W
#3 V1000837-002 NA 15 green 12W
#4 01549831 50 150 black 130W