我试图根据另一列中的关系身份将相关对象的空间坐标放入新列中。但是,我还没有找到正确的方法。 这是我的数据框的样子
object parent x-pos y-pos
1: Z A 0.5 0.7
2: B A 0.1 0.0
3: C E 4.6 2.5
4: D E 5.6 5.0
5: A B 0.2 1.0
6: P B 0.4 2.0
我要添加到此数据框中的是基于“父级列”中父级信息的两个新的x-pos-parent和y-pos-parent列,针对“对象”列中的每个唯一对象?任何帮助将不胜感激...
预期的df应该看起来
like so
object parent x-pos y-pos x-pos-parent y-pos-parent
1: Z A 0.5 0.7 0.2 1.0
2: B A 0.1 0.0 0.2 1.0
答案 0 :(得分:1)
如果只深入其中,您可以进行left_join
或等效操作:
library(dplyr)
DF%>%
left_join(., ., by = c('parent' = 'object'))%>%
select(-parent.y)
object parent x.pos.x y.pos.x x.pos.y y.pos.y
1 Z A 0.5 0.7 0.2 1
2 B A 0.1 0.0 0.2 1
3 C E 4.6 2.5 NA NA
4 D E 5.6 5.0 NA NA
5 A B 0.2 1.0 0.1 0
6 P B 0.4 2.0 0.1 0
您还可以进行data.table
更新联接:
DT <- as.data.table(DF)
DT[DT
, on = .(parent = object)
, `:=`(x_pos_par = i.x.pos
, y_pos_par = i.y.pos)]
DT
object parent x.pos y.pos x_pos_par y_pos_par
1: Z A 0.5 0.7 0.2 1
2: B A 0.1 0.0 0.2 1
3: C E 4.6 2.5 NA NA
4: D E 5.6 5.0 NA NA
5: A B 0.2 1.0 0.1 0
6: P B 0.4 2.0 0.1 0
如果您具有多个级别的递归,则应查看软件包igraph
。
数据
Lines <- "object parent x-pos y-pos
1 Z A 0.5 0.7
2 B A 0.1 0.0
3 C E 4.6 2.5
4 D E 5.6 5.0
5 A B 0.2 1.0
6 P B 0.4 2.0"
DF <- read.table(text = Lines)