如何在其他列中访问单元格给定的值

时间:2016-08-10 20:51:11

标签: r

假设我们这个数据框有4列:

Subject Trial Before After
      1     1     10    16
      1     2     11    17
      1     3     12    18
      2     1     13    19
      2     2     14    20
      2     3     15    21

假设最多有一行具有给定的主题编号和试用编号。给定主题编号和试用编号,如何访问具有给定主题和试用编号的行中Before列中的值?

谢谢。

2 个答案:

答案 0 :(得分:3)

有342种方式,但其中一种方式是subset

df <- head(mtcars)
df
#                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
#Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
#Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
#Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
#Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
#Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
#Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

subset(df, cyl == 4 & disp == 108, select=mpg)
#            mpg
#Datsun 710 22.8

再多一点

with(df, mpg[cyl == 4 & disp == 108])
#[1] 22.8

library(dplyr)
df %>% filter(cyl == 4 & disp == 108) %>% select(mpg)
#   mpg
#1 22.8

library(data.table)
setDT(df)[cyl == 4 & disp == 108, mpg]
#[1] 22.8

答案 1 :(得分:0)

使用下面的数据框,您将运行两次评估(每行一次)并将结果与​​&运算符组合。这将返回TRUE / FALSE值的向量,您可以使用which()函数将其缩减为索引。然后,将其应用于数据框行引用,并指定要从该行返回的列。

a = c(1, 1, 1, 2, 2, 2)
b = c(1,2,3,1,2,3)
c = c(10,11,12,13,14,15)
d = c(16,17,18,19,20,21)
e = data.frame(a,b,c,d)

e[which(e$a == 2 & e$b == 2), 'c']