<p>如果没有更多的信息,我通常会如何处理这个问题。我展示了一个<code>tidyverse</code>解决方案,但这当然也可以在baser中实现</p>
<pre><code>data <- structure(list(child = structure(c(10L, 11L, 9L, 4L, 5L, 5L,
6L, 1L, 8L, 13L, 7L, 3L, 16L, 17L, 12L, 15L, 14L, 2L), .Label = c("b12",
"drik2", "ggb8", "gr4", "grd", "n7", "ngb2", "nyvc", "s0", "sf",
"st", "stab3", "trub2", "ubc2", "ubc8", "xtr2d", "xtuD"), class = "factor"),
parent = structure(c(2L, 2L, 2L, 11L, 11L, 12L, 10L, 10L,
7L, 4L, 1L, 1L, 9L, 13L, 5L, 6L, 8L, 3L), .Label = c("b12",
"d", "ggb8", "gr3", "gr4", "gr9", "grd", "n7", "nyvc", "s0",
"sf", "st", "trub2"), class = "factor"), child_level = structure(c(4L,
4L, 4L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 2L), .Label = c("b", "i", "t", "x"), class = "factor")), class = "data.frame", row.names = c(NA,
-18L))
library(tidyverse)
pivot <- data %>% mutate(unique = rownames(data)) %>% pivot_wider(id_cols = unique, names_from = child_level, values_from = child) %>% select(!unique)
</code></pre>
<p>输入如下所示:</p>
<pre><code># > data
# child parent child_level
# 1 sf d x
# 2 st d x
# 3 s0 d x
# 4 gr4 sf t
# 5 grd sf t
# 6 grd st t
# 7 n7 s0 t
# 8 b12 s0 t
# 9 nyvc grd b
# 10 trub2 gr3 b
# 11 ngb2 b12 b
# 12 ggb8 b12 b
# 13 xtr2d nyvc i
# 14 xtuD trub2 i
# 15 stab3 gr4 i
# 16 ubc8 gr9 i
# 17 ubc2 n7 i
# 18 drik2 ggb8 i
</code></pre>
<p>它将输出以下内容:</p>
<pre><code># > pivot
# # A tibble: 18 x 4
# x t b i
# <fct> <fct> <fct> <fct>
# 1 sf NA NA NA
# 2 st NA NA NA
# 3 s0 NA NA NA
# 4 NA gr4 NA NA
# 5 NA grd NA NA
# 6 NA grd NA NA
# 7 NA n7 NA NA
# 8 NA b12 NA NA
# 9 NA NA nyvc NA
# 10 NA NA trub2 NA
# 11 NA NA ngb2 NA
# 12 NA NA ggb8 NA
# 13 NA NA NA xtr2d
# 14 NA NA NA xtuD
# 15 NA NA NA stab3
# 16 NA NA NA ubc8
# 17 NA NA NA ubc2
# 18 NA NA NA drik2
</code></pre>