请参阅dplyr中列的特定值

请参阅dplyr中列的特定值,r,dplyr,R,Dplyr,这个答案就在某个地方,但我很难把它说清楚 我想用dplyr框架引用向量的子集。最好用一个例子来解释 我在计算一个叫做“Delta E”的东西 这要求我在本例中引用一行(称为“控件”) 我试图找到在data.frame的列中引用特定值的方法 以下是示例数据: df <- read.table(text=" sampleID L a b control 54.1 32.5 85.6 A 51.7 34.2 83.3 B 5

这个答案就在某个地方,但我很难把它说清楚

我想用
dplyr
框架引用向量的子集。最好用一个例子来解释

我在计算一个叫做“Delta E”的东西

这要求我在本例中引用一行(称为“控件”)

我试图找到在data.frame的列中引用特定值的方法

以下是示例数据:

df <- read.table(text="
sampleID     L     a     b
control   54.1  32.5  85.6
A         51.7  34.2  83.3
B         53.7  32.8  85.0
D         53.8  32.7  85.1", header=T)

其中,
Lc=54.1
ac=32.5
bc=85.6
与对照样本相对应。

这不是非常漂亮,但你可以做到

df %>%
  mutate(deltaE = sqrt((L[sampleID=="control"] - L)^2 + 
                         (a[sampleID=="control"] - a)^2 +
                         (b[sampleID=="control"] - b)^2))
或者把它分成几个步骤

df %>%
  mutate(isControl = sampleID=="control",
         Lc = L[isControl],
         ac = a[isControl],
         bc = b[isControl]) %>% 
  mutate(deltaE = sqrt((Lc - L)^2 + 
                         (ac - a)^2 +
                         (bc - b)^2)) %>% 
  select(-isControl, -Lc, -ac, -bc)
df %>%
  mutate(isControl = sampleID=="control",
         Lc = L[isControl],
         ac = a[isControl],
         bc = b[isControl]) %>% 
  mutate(deltaE = sqrt((Lc - L)^2 + 
                         (ac - a)^2 +
                         (bc - b)^2)) %>% 
  select(-isControl, -Lc, -ac, -bc)