Подтвердить что ты не робот

Как я могу заказать фрейм данных вторым столбцом в R?

Возможный дубликат:
Как отсортировать данные по столбцам (столбцам) в R

Мне просто интересно, может ли кто-нибудь помочь мне, у меня есть то, что, как я думал, должно быть легкой проблемой для решения.

У меня есть таблица ниже:

SampleID           Cluster

R0132F041p          1

R0132F127           1

R0132F064           1

R0132F068p          1

R0132F015           2

R0132F094           3

R0132F105           1

R0132F013           2

R0132F114           1

R0132F014           2

R0132F039p          3

R0132F137           1

R0132F059           1

R0132F138p          2

R0132F038p          2

и я хотел бы отсортировать/заказать его Cluster, чтобы получить результаты, как показано ниже:

SampleID    Cluster

R0132F041p  1

R0132F127   1

R0132F064   1

R0132F068p  1

R0132F105   1

R0132F114   1

R0132F137   1

R0132F059   1

R0132F015   2

R0132F013   2

R0132F014   2

R0132F138p  2

R0132F038p  2

R0132F094   3

R0132F039p  3

Я пробовал следующий код R:

data<-read.table('Table.txt', header=TRUE,row.names=1,sep='\t')

data <- data.frame(data)
data <- data[order(data$Cluster),]
write.table(data, file = 'OrderedTable.txt', append = TRUE,quote=FALSE, sep = '\t', na ='NA', dec = '.', row.names = TRUE, col.names = FALSE)

и получите следующий вывод:

1   1

2   1

3   1

4   1

5   1

6   1

7   1

8   1

9   2

10  2

11  2

12  2

13  2

14  3

15  3

Зачем заменить SampleIDs на цифры 1-15 и что представляют эти цифры, я прочитал страницу ?order(), однако это, кажется, объясняет sort.list лучше, чем order(), если кто-нибудь может помочь мне в этом, я был бы очень благодарен.

4b9b3361

Ответ 1

Короткий ответ: вы сделали это отлично. У вас просто возникают трудности с чтением и записью файлов. Просматривая свой код:

data<-read.table('Table.txt', header=TRUE,row.names=1,sep='\t')

Вышеприведенная строка отлично читает ваши данные, но row.names=1 сказал ей использовать первый столбец в качестве имен для строк. Итак, теперь ваши идентификаторы SampleID являются именами строк, а не их собственным столбцом. Если вы наберете data или head(data) или str(data) сразу после запуска этой строки, это должно быть ясно. Просто опустите этот аргумент row.names и он будет правильно читать.

data <- data.frame(data)

Вам не нужна эта строка выше, потому что read.table() создает dataframe. Вы можете видеть это с помощью str(data).

data <- data[order(data$Cluster),]

Вышеприведенная строка идеальна.

write.table(data, file = 'OrderedTable.txt', append = TRUE,
   quote=FALSE, sep = '\t', na ='NA', dec = '.', row.names = TRUE, 
   col.names = FALSE)

Здесь вы указали аргумент col.names = FALSE, поэтому в вашем файле нет имен столбцов. Вам также не нужно/хотите append=TRUE. Если вы посмотрите на help(write.table), вы увидите, что это "имеет значение только в том случае, если файл является символьной строкой". Здесь, похоже, файл записывается без окончания последней строки, что, скорее всего, вызовет жалобы read.table().

Числа 1-15 в вашем результате выглядят как номера строк. Вы не объясните, как вы смотрите на полученный файл, поэтому я не могу быть уверен. Вероятно, вы прочитали свой файл таким образом, чтобы он не анализировал row.names и вместо этого показывал номера строк. Если вы убедитесь, что ваш столбец SampleIDs не получает назначение имен строк, вы, вероятно, будете в порядке.

Ответ 2

Посмотрите на функцию arrange пакета plyr.

arrange(data, Cluster)
write.table(data, "ordered_data.txt")