ранжирование элементов векторов во фрейме данных

пожалуйста, помогите мне с этим, у меня есть этот кадр данных:

df <- data.frame(G1=c("a","b","c","d","e"),
                 G2=c("a","c","b","d","e"),
                 G3=c("a","d","e","b","c"),
                 G4=c("a","b","c","d","e"))

И я хотел бы создать еще одну таблицу, показывающую положение каждого термина от G1 до G4, чтобы она могла выглядеть так:

rank <- data.frame(term=c("a","b","c","d","e"),
                   G1=c(1:5),
                   G2=c(1,3,2,4,5),
                   G3=c(1,4,5,2,3),
                   G4=c(1:3,4,5))

Мой второй вопрос: есть ли графический способ соединения каждого элемента по таблице, скажем, стрелка для «b», идущая от [2,1] до [3,2] до [4,3] до [2,4 )

Спасибо!

РЕДАКТИРОВАТЬ:

Я применил предложения в своем исходном фрейме данных. Вот пример:

df <- data.frame(G1=c("bta-let-7a-1","bta-let-7b", "bta-mir-26a-1", "bta-mir-21"), 
                 G2=c("bta-mir-21", "bta-let-7a-1", "bta-let-7b", "bta-mir-26a-1"),
                 G3=c("bta-mir-26a-1", "bta-mir-21", "bta-let-7a-1", "bta-let-7b"), 
                 G4=c("bta-let-7b","bta-mir-26a-1", "bta-mir-21", "bta-let-7a-1"))

Проблема в том, что когда я lapply, столбец «G1» становится «1», «2», «4», «3».

rank <- as.data.frame(lapply(df, as.integer))

Однако я должен иметь «G1» как «1», «2», «3», «4», а остальные остальные столбцы располагаются в соответствии с «G1». Например, что «Г2» были «4», «1», «2», «3». (это становится более грязным в моей исходной таблице)


person Sergio.pv    schedule 11.04.2014    source источник
comment
sapply (df, as.numeric)   -  person infominer    schedule 11.04.2014


Ответы (1)


Поскольку у вас уже есть факторы, это просто сделать:

as.data.frame(lapply(df, as.integer))
#  G1 G2 G3 G4
#1  1  1  1  1
#2  2  3  4  2
#3  3  2  5  3
#4  4  4  2  4
#5  5  5  3  5

Если вы хотите изменить порядок своих факторов, как в отредактированном OP, один из способов сделать это:

as.data.frame(lapply(lapply(df, function(x)
                  factor(as.character(x), as.character(df$G1))), as.integer))
person eddi    schedule 11.04.2014
comment
И во второй части, если вы загрузите library(MASS), вы можете сделать parcoord(rank), если вы назначите rank <- as.data.frame..., как предложил @eddi - person Gavin Kelly; 11.04.2014
comment
Спасибо. Как я могу увидеть термины a,b,c,d,e? (в таблице и на графике? - person Sergio.pv; 11.04.2014
comment
@ Sergio.pv, возможно, используйте levels(unlist(df))? Немного сложно сказать, как лучше всего извлечь эту информацию (для этого недостаточно информации), но это сработает для ОП. - person eddi; 11.04.2014
comment
У меня есть очень большой список имен (~ 600 имен), которые представлены в 4 группах на разных позициях (от 1 до ~ 600). Позиция в каждой группе важна для интерпретации данных, поэтому необходимо увидеть, как один термин меняется в четырех группах. - person Sergio.pv; 12.04.2014
comment
@eddi Я пытался использовать ось (2, at=0:4, labels=letters[1:5]). Я не получаю вывод a,b,c,d,e для каждой строки, только a внизу графика и b вверху - person Sergio.pv; 12.04.2014
comment
@ Sergio.pv Я думаю, ты хочешь axis(1, ...) - person eddi; 14.04.2014