首页 文章

根据dplyr中另一个变量的子集更改值

提问于
浏览
3

我有一个数据集,其中包含一组有ACL重建的运动员的肌肉活动数据 . 我想重新分配肢体侧以指示ACLR肢体和未受伤的肢体 . 查看下面名为EMG的数据集,假设John有一个左ACLR而Bob有一个右ACLR .

athlete     limb     EMG_value
John        left         0.8
John        right        1.2
Bob         left         0.5
Bob         right        0.9

我希望数据集看起来像这样:

athlete     limb       EMG_value
John        ACLR         0.8
John        uninjured    1.2
Bob         uninjured    0.5
Bob         ACLR         0.9

我最初的计划是通过运动员对数据进行子集化,更改肢体值,然后将数据绑定回原始数据集 .

流程摘录如下:

John = subset(EMG, athlete=="John")

John$side<- as.character(John$side)

John$side[John$side=="Left"]="ACLR"
John$side[John$side=="Right"]="Uninjured"
John$side = as.factor(John$side)

Bob = subset(EMG, athlete=="Bob")

Bob$side<- as.character(Bob$side)

Bob$side[Bob$side=="Left"]="Uninjured"
Bob$side[Bob$side=="Right"]="ACLR"
Bob$side = as.factor(Bob$side)

EMG2 = rbind(Bob, John)

我确信有一种方法可以使用dplyr中的数据管道更快地完成此操作 . 我确信有一种方法可以根据指定的条件替换变量的值 .

逻辑将是:如果运动员== Bob然后用ACLR替换Left并用Uninjured替换Right .

感谢您的任何帮助,您可以提供 .

马特

1 回答

  • 2

    BTW:您的逻辑和示例相矛盾:您说“Bob”和“Left”表示“ACLR”,但您的示例数据不一致 . 但是:

    library(dplyr)
    ## generalizable so you can easily add other patients, etc
    leftAthletes <- c('Bob')
    
    mutate(acl, limb=ifelse(xor(athlete %in% leftAthletes, limb == 'left'),
                            'uninjured', 'ACLR'))
    ##   athlete      limb EMG_value
    ## 1    John uninjured       0.8
    ## 2    John      ACLR       1.2
    ## 3     Bob      ACLR       0.5
    ## 4     Bob uninjured       0.9
    

    (注意使用 xor ... ifelse 内的检查基本上是"if in leftAthletes and right limb, or not in leftAthletes and left limb, then uninjured else ACLR" . )

相关问题