2013-11-20 3 views
0

У меня есть кадр данных, состоящий из двух столбцов: true.de.status и decision.de. Набор данные воспроизводят ниже:построить кадр данных в R из объединения информации двух столбцов

dat = structure(c(0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 
0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 
0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0), .Dim = c(100L, 
2L), .Dimnames = list(NULL, c("true.de.status", "decision.de" 
))) 

Первые несколько рядов dat являются:

 true.de.status decision.de 
    [1,]    0   0 
    [2,]    0   0 
    [3,]    1   1 
    [4,]    0   1 
    [5,]    1   0 
    [6,]    0   0 
    [7,]    1   1 
    [8,]    1   0 

Теперь я надеюсь нарисовать участок с осью й числом генов (то есть общее количество строк в dat) и по оси Y число истинных положительных значений. Ось оси легко определить: seq(0,100) даст мне 0, 1, ..., 100 генов. Для оси y мне нужно рассчитать на основе двух столбцов true.de.status и decision.de: по мере прохождения каждой строки я могу рассчитать истинные положительные значения по мере увеличения количества генов (строк). Например,

first 1 gene included: True positive (TP) = 0 
first 2 genes included: TP = 0 
first 3 genes included: TP = 1 (since both columns have 1 and they match) 
first 4 genes included: TP = 1 (`decision.de` is 1, but `true.de.status` is 0, so it is a false positive) 
first 5 genes included: TP = 1 (two columns don't match) 
...... 

Есть простой способ манипулировать кадр данных dat и возвращает вектор той же длины, как dim(dat)[1] с числом истинных позитивов? Благодаря!

+0

Просто так мы ясно, что это не dataframe, а матрица. Вот почему мне нужно было использовать «[», а не «$» для доступа к своим столбцам. –

ответ

1

Смотрите, если это то, что вы хотите:.

plot(cumsum(dat[ , "true.de.status"] == 1 & 
       dat[ , "decision.de"] == 1) , 
     type="s") 

(По умолчанию значения х будет 1:100 Если вы хотите точки или линии, которые вы можете изменить аргумент типа Очевидно, что вы могли бы использовать vec <- ... для назначения этого. значение cumsum к имени)

enter image description here

1

Похоже, что вы хотите

df <- as.data.frame(dat) 
df$TP <- cumsum(as.numeric(df$true.de.status == 1 & df$decision.de == 1)) 

Это будет возвращать кумулятивное количество случаев, когда обе колонки имеют 1 и они совпадают.

+1

Возможно, OP хочет 'cumsum' вашей TP? – Henrik

+0

Спасибо! Мне было интересно, почему последние два примера, которые он предоставил, считались истинными позитивами ... – colcarroll

+0

Вопрос, возможно, был сформулирован более четко ... – Henrik

Смежные вопросы