2015-01-19 2 views
0

У меня есть кадр данных, состоящий из флуоресценции чтения из нескольких клеток, отслеживаемых в течение долгого времени, например:Subset кадр данных на основе столбца значений

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 

Количество ОТНОСИТСЯ к номеру ячейки. То, что я хочу, это сопоставить показание флуоресценции на основе номера ячейки. 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 

Я использовал какую функцию, чтобы извлечь их по одному за раз:

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

Но это потребовало бы мне написать строку для каждой ячейки (из которых есть сотни).

Благодарим за помощь! Извиняется, что я все еще немного R noob.

ответ

1

Как об этом:

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 

индекс добавляется для уникального идентификатора в spread функции от tidyr. Посмотрите this сообщение для получения дополнительной информации.

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 
Смежные вопросы