我正在try 基于其他三列在数据框中创建一个新列:父列、特定指示符列和组合的父指示符的值.

已给予:

  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_val( Select 每个父级的x值),这样得到的数据帧是:

  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)
)

我曾考虑迭代数据帧,将给定父对象的x值存储在一个变量中,并将其赋给每个父对象.但感觉必须有一个更优雅的解决方案?

推荐答案

我们可以这样做:

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

R相关问答推荐

按崩溃类别分类的指数

提取rame中对应r中某个变量的n个最小正值和n个最大负值的条目

是否可以 Select 安装不带文档的R包以更有效地存储?

Tidyverse/Djirr为从嵌套列表中提取的列名赋值的解决方案

矩阵%*%矩阵中的错误:需要数字/复杂矩阵/向量参数

在GGPLATE中将突出的点放在前面

根据日期从参考帧中创建不同的帧

多个过滤器内的一个盒子在仪表板Quarto

即使硬币没有被抛出,也要保持对其的跟踪

R函数,用于生成伪随机二进制序列,其中同一数字在一行中不出现超过两次

线性模型斜率在减少原始数据时提供NA

R-按最接近午夜的时间进行筛选

我如何使用循环来编写冗余的Rmarkdown脚本?

变长向量的矢量化和

创建在文本字符串中发现两个不同关键字的实例的数据框

我需要使用ggplot2制作堆叠条形图

用满足特定列匹配的另一行替换NA行

如何在刻面和翻转堆叠条形图中对齐geom_text()

以R表示的NaN值的IS.NA状态

重写时间间隔模糊连接以减少内存消耗