从一个特定的行子集中改变R中的一个列

cclgggtu  于 2023-05-15  发布在  其他
关注(0)|答案(1)|浏览(113)

我试图在一个 Dataframe 中创建一个新的列,它基于另外三个列:父列、特定指示符列和组合的父特定指示符的值。
给出:

parent specific val
1      a        x  10
2      a        y  11
3      a        z  12
4      b        x  20
5      b        y  21
6      b        z  22
7      c        x  30
8      c        y  31
9      c        z  32

我想创建一个新列,比如px_瓦尔(选择每个父列的x值),这样得到的 Dataframe 是:

parent specific val px_val
1      a        x  10     10
2      a        y  11     10
3      a        z  12     10
4      b        x  20     20
5      b        y  21     20
6      b        z  22     20
7      c        x  30     30
8      c        y  31     30
9      c        z  32     30

测试df代码:

df <- data.frame(
  parent=c('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'),
  specific=c('x', 'y', 'z', 'x', 'y', 'z', 'x', 'y', 'z'),
  val=c(10, 11, 12, 20, 21, 22, 30, 31, 32)
)

我想可能会迭代 Dataframe ,将给定父节点的x值存储在一个变量中,并将其分配给每个父节点。但我觉得应该有个更优雅的解决方案?

vbopmzt1

vbopmzt11#

我们可以这样做:
px_val将包含specific等于x的值,对于每个唯一父-> val[specific == 'x']
.by=...只对这个突变进行分组,好处是我们不需要在之后使用ungroup():

library(dplyr) #>= dplyr 1.1.0

df %>%
  mutate(px_val = val[specific == 'x'], .by=parent)

  parent specific val px_val
1      a        x  10     10
2      a        y  11     10
3      a        z  12     10
4      b        x  20     20
5      b        y  21     20
6      b        z  22     20
7      c        x  30     30
8      c        y  31     30
9      c        z  32     30

相关问题