基于列值的子集数据框

Subset data frame based on column values

我有一个数据框,其中包含随时间跟踪的多个细胞的荧光读数,例如:

Number=c(1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4)
Fluorescence=c(9,10,20,30,8,11,21,31,6,12,22,32,7,13,23,33)
df = data.frame(Number, Fluorescence)

其中得到:

   Number Fluorescence
1       1            9
2       2           10
3       3           20
4       4           30
5       1            8
6       2           11
7       3           21
8       4           31
9       1            6
10      2           12
11      3           22
12      4           32
13      1            7
14      2           13
15      3           23
16      4           33

Number 属于单元格编号。我想要的是根据细胞数量整理荧光读数。这里的 data.frame 计数为 1-4,而我真的想要这样的东西:

   Number Fluorescence
1       1            9
2       1            8
3       1            6
4       1            7
5       2           10
6       2           11
7       2           12
8       2           13
9       3           20
10      3           21
11      3           22
12      3           23
13      4           30
14      4           31
15      4           32
16      4           33

或者更理想的是拥有基于数字的列,然后是各自的细胞荧光:

        1    2    3    4
1       9    10   20   30
2       8    11   21   31
3       6    12   22   32
4       7    13   23   33

我使用 which 函数一次提取一个:

Cell1=df[which(df[,1]==1),2]

但这需要我为每个单元格(其中有数百个)写一行。

感谢您对此的任何帮助!抱歉,我还是个 R 菜鸟。

这个怎么样:

library(tidyr);library(data.table)
number <- c(1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4)
fl <- c(9,10,20,30,8,11,21,31,6,12,22,32,7,13,23,33)
df <- data.table(number,fl)
df[, index:=1:.N, keyby=number]
df
    number fl index
 1:      1  9     1
 2:      1  8     2
 3:      1  6     3
 4:      1  7     4
 5:      2 10     1
 6:      2 11     2
 7:      2 12     3
 8:      2 13     4
 9:      3 20     1
10:      3 21     2
11:      3 22     3
12:      3 23     4
13:      4 30     1
14:      4 31     2
15:      4 32     3
16:      4 33     4

tidyr 中的 spread 函数中的唯一标识符添加了索引。查看 this post 了解更多信息。

spread(df,number,fl)
   index 1  2  3  4
1:     1 9 10 20 30
2:     2 8 11 21 31
3:     3 6 12 22 32
4:     4 7 13 23 33