我有一个数据集,其中包含来自一组进行了ACL重建的运动员的肌肉 Activity 数据。我想重新分配肢体一侧以指示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
我最初的计划是按运动员对数据进行子集处理,更改肢体值,然后将数据绑定(bind)回原始数据集中。
从过程中摘录如下:
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中的数据管道更快地完成此操作。我确定有一种方法可以根据指定条件替换变量的值。
逻辑将是:如果田径运动员==鲍勃,则用ACLR代替Left,用未受伤代替Right。
感谢您的任何帮助,您可以提供。
马特
最佳答案
顺便说一句:您的逻辑和示例矛盾:您说“鲍勃”和“左”表示“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
内的检查实际上表示“如果在leftAthletes和右肢中,或者不在leftAthletes和左肢中,那么ACLR不受伤”。)