Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有基于一个列变量查找make列值的R函数?_R_Dplyr_Tidyr_Mutate - Fatal编程技术网

是否有基于一个列变量查找make列值的R函数?

是否有基于一个列变量查找make列值的R函数?,r,dplyr,tidyr,mutate,R,Dplyr,Tidyr,Mutate,我试图根据另一列中的关系标识,将相关对象的空间坐标放入新列中。然而,我还没有找到正确的方法。 下面是我的数据框的外观 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

我试图根据另一列中的关系标识,将相关对象的空间坐标放入新列中。然而,我还没有找到正确的方法。 下面是我的数据框的外观

    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

如果此操作只进行一次,则可以执行左联合或等效操作:

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

我不清楚预期的产出会是什么样子。你能手工写下你期望得到的结果吗?我的最佳猜测是,第1行有父级A,因此我们查看object=A的第5行,并将x_pos和y_pos值拉入第1行的新列x_pos_parent和y_pos_parent。这就是你想要的吗?Gregor,谢谢!这正是我需要的。。。
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
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)