Mam taką ramkę danych:
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"
Chcę przekonwertować nazwy wierszy na pierwszą kolumnę. Obecnie używam czegoś takiego, aby nazwy wierszy były pierwszą kolumną:
d <- df
names <- rownames(d)
rownames(d) <- NULL
data <- cbind(names,d)
Czy jest do tego jedna linia?
d <- cbind(rownames(d), data.frame(d, row.names=NULL))
Odpowiedzi:
Możesz zarówno usunąć nazwy wierszy, jak i przekonwertować je na kolumnę przez odniesienie (bez ponownego przydzielania pamięci za pomocą
->
) używającsetDT
i jegokeep.rownames = TRUE
argumentu zdata.table
pakietuJak wspomniał @snoram, możesz nadać nowej kolumnie dowolną nazwę, np.
setDT(df, keep.rownames = "newname")
Dodać „ nową nazwę ” jako kolumnę wierszy.źródło
colnames(df)[1] <- "newname"
razie potrzeby użyj, aby zmienić nazwę pierwszej kolumny.setnames(df, 1, "newname")
jestdata.table
droga.setDT(df, keep.rownames = "newname")[]
as.data.table()
: Jeśli TRUE, dodaje nazwy obiektów wejściowych jako oddzielną kolumnę o nazwie „rn”. keep.rownames = "id" zamiast tegoLub możesz użyć
dplyr
,add_rownames
które działa tak samo jak odpowiedź Davida:UPDATE (połowa 2016 r.): (Włączona do powyższego)
stara wywołana funkcja
add_rownames()
została przestarzała i jest zastępowana przeztibble::rownames_to_column()
(te same funkcje, ale Hadleydplyr
nieco refaktoryzował ).źródło
Jedną linią jest:
źródło
rownames
jako kolumna na końcu, a właściwie nie jako pierwsza kolumna.Alternatywnie możesz utworzyć nową ramkę danych (lub nadpisać obecną, jak w przykładzie poniżej), dzięki czemu nie musisz używać żadnego zewnętrznego pakietu. Jednak ten sposób może nie być wydajny w przypadku dużych ramek danych.
źródło
df <- cbind(names = rownames(df), df)
Przeniosłem mój komentarz do odpowiedzi na sugestię powyżej:
Nie potrzebujesz dodatkowych paczek, oto jedna linijka:
źródło
dplyr::as_data_frame(df, rownames = "your_row_name")
da ci jeszcze prostszy wynik.źródło
Lub używając
DBI
ssqlRownamesToColumn
źródło