У меня есть фрейм данных, как это:
df
VALUE ABS_CALL DETECTION P-VALUE
1007_s_at "957.729231881542" "P" "0.00486279317241156"
1053_at "320.632701283368" "P" "0.0313356324173416"
117_at "429.842323161046" "P" "0.0170004527476119"
121_at "2395.7364289242" "P" "0.0114473584876183"
1255_g_at "116.493632746934" "A" "0.39799368200131"
1294_at "739.927122116896" "A" "0.0668649772942343"
Я хочу преобразовать имена строк в первый столбец. В настоящее время я использую что-то вроде этого, чтобы сделать имена строк в качестве первого столбца:
d <- df
names <- rownames(d)
rownames(d) <- NULL
data <- cbind(names,d)
Есть ли одна линия для этого?
d <- cbind(rownames(d), data.frame(d, row.names=NULL))
Ответы:
Вы можете удалить как имена строк, так и преобразовать их в столбец по ссылке (без перераспределения памяти
->
), используяsetDT
егоkeep.rownames = TRUE
аргумент изdata.table
пакета.Как упомянуто @snoram, вы можете дать новому столбцу любое имя, которое хотите, например
setDT(df, keep.rownames = "newname")
, добавив «newname» в качестве столбца строк.источник
colnames(df)[1] <- "newname"
для переименования первого столбца, если это необходимо.setnames(df, 1, "newname")
этоdata.table
путь.setDT(df, keep.rownames = "newname")[]
as.data.table()
: Если TRUE, добавляет имена входных объектов в виде отдельного столбца с именем «rn». keep.rownames = "id" называет столбец "id" вместо этогоИли вы можете использовать тот
dplyr
,add_rownames
который делает то же самое, что и ответ Дэвида:ОБНОВЛЕНИЕ (середина 2016 года): (включено в вышеуказанное)
старая вызванная функция
add_rownames()
устарела и заменяется наtibble::rownames_to_column()
(те же функции, но Хэдлиdplyr
немного рефакторинг ).источник
Один вариант строки:
источник
rownames
как последний столбец, а не как первый столбец.Кроме того, вы можете создать новый фрейм данных (или перезаписать текущий, как показано в примере ниже), чтобы вам не нужно было использовать какой-либо внешний пакет. Однако этот способ может быть неэффективным при использовании огромных информационных фреймов.
источник
df <- cbind(names = rownames(df), df)
Переместил мой комментарий в ответ по предложению выше:
Вам не нужны дополнительные пакеты, вот одна строка:
источник
dplyr::as_data_frame(df, rownames = "your_row_name")
даст вам еще более простой результат.источник
Или с помощью
DBI
ssqlRownamesToColumn
источник