我有一個包含 1 列的名稱資料框。我嘗試了多次迭代order()并將其轉換為串列并嘗試sort()了幾種不同的方式,但都沒有成功。
以下dput()供參考:
> dput(names.ordered)
structure(list(Directors = c("Darabont, Frank", "Nolan, Christopher",
"Lumet, Sidney", "Spielberg, Steven", "Jackson, Peter", "Tarantino, Quentin",
"Leone, Sergio", "Fincher, David", "Zemeckis, Robert", "Kershner, Irvin",
"Wachowski, Lana", "Scorsese, Martin", "Forman, Milos", "Kurosawa, Akira",
"Demme, Jonathan", "Meirelles, Fernando", "Benigni, Roberto",
"Capra, Frank", "Lucas, George", "Miyazaki, Hayao", "Besson, Luc",
"Kobayashi, Masaki", "Polanski, Roman", "Cameron, James", "Singer, Bryan",
"Hitchcock, Alfred", "Allers, Roger", "Chaplin, Charles", "Kaye, Tony",
"Takahata, Isao", "Chazelle, Damien", "Scott, Ridley", "Nakache, Olivier",
"Curtiz, Michael", "Tornatore, Giuseppe", "Kubrick, Stanley",
"Wilder, Billy", "Stanton, Andrew", "Russo, Anthony", "Persichetti, Bob",
"Chan-Wook, Park", "Phillips, Todd", "Shinkai, Makoto", "Unkrich, Lee",
"Labaki, Nadine", "Petersen, Wolfgang", "Hirani, Rajkumar", "Lasseter, John",
"Mendes, Sam", "Gibson, Mel", "Kail, Thomas", "Marquand, Richard",
"Klimov, Elem", "Lang, Fritz", "Khan, Aamir", "Welles, Orson",
"Vinterberg, Thomas", "Aronofsky, Darren", "Donen, Stanley",
"Gondry, Michel", "Lean, David", "Tiwari, Nitesh", "Villeneuve, Denis",
"Zeller, Florian", "Farhadi, Asghar", "Ray, Satyajit", "Ritchie, Guy",
"Jeunet, Jean-Pierre", "Mulligan, Robert", "Docter, Pete", "Mann, Michael",
"Hanson, Curtis", "McTiernan, John", "Gnanavel, T.J.", "Farrelly, Peter",
"Hirschbiegel, Oliver", "Gilliam, Terry", "Eastwood, Clint",
"Majidi, Majid", "Kramer, Stanley", "Sturges, John", "Huston, John",
"Howard, Ron", "Coen, Ethan", "Carpenter, John", "Bergman, Ingmar",
"McDonagh, Martin", "Pablos, Sergio", "Lynch, David", "Weir, Peter",
"Reed, Carol", "McTeigue, James", "Boyle, Danny", "Coen, Joel",
"O'Connor, Gavin", "Fleming, Victor", "Ozu, Yasujir?", "Kazan, Elia",
"Irmak, Cagan", "Szifron, Damián", "Tarkovsky, Andrei", "Cimino, Michael",
"Costa-Gavras, Costa-Gavras,", "Anderson, Wes", "Keaton, Buster",
"Bruckman, Clyde", "Linklater, Richard", "Elliot, Adam", "Sheridan, Jim",
"Abrahamson, Lenny", "Raghavan, Sriram", "Mangold, James", "McQueen, Steve",
"Lubitsch, Ernst", "DeBlois, Dean", "Miller, George", "Wyler, William",
"Yates, David", "Clouzot, Henri-Georges", "Reiner, Rob", "Kashyap, Anurag",
"Rosenberg, Stuart", "Hallstr?m, Lasse", "Kassovitz, Mathieu",
"Truffaut, Fran?ois", "Yamada, Naoko", "Stone, Oliver", "McCarthy, Tom",
"Jones, Terry", "George, Terry", "Turgul, Yavuz", "Wong, Kar-Wai",
"Penn, Sean", "Anno, Hideaki", "Pontecorvo, Gillo", "Fellini, Federico",
"Wenders, Wim", "Kieslowski, Krzysztof", "Kumar, Ram", "Coppola, Francis Ford",
"Joon Ho, Bong", "von Donnersmarck, Florian Henckel", "Van Sant, Gus",
"De Sica, Vittorio", "Hill, George Roy", "De Palma, Brian", "Mankiewicz, Joseph L.",
"Anderson, Paul Thomas", "del Toro, Guillermo", "Campanella, Juan José",
"Shyamalan, M. Night", "Dreyer, Carl Theodor", "Avildsen, John G.",
"I?árritu, Alejandro G.")), row.names = c(NA, -154L), class = "data.frame")
我已經嘗試過一些回傳錯誤或沒有結果的事情:
> names.ordered <- names.ordered[order(names.ordered$Directors)]
Error in `[.data.frame`(names.ordered, order(names.ordered$Directors)) :
undefined columns selected
> names.ordered <- names.ordered[order(1)]
#after converting to list
> names.ordered <- sort(names.ordered)
Error in sort.int(x, na.last = na.last, decreasing = decreasing, ...) :
'x' must be atomic
uj5u.com熱心網友回復:
即使資料框只包含一列,您也需要指定要對哪一列進行排序/排序。
如果要保留原始names.ordered使用順序order來創建索引:
idx <- order(names.ordered$Director)
head(names.ordered)
Directors
1 Darabont, Frank
2 Nolan, Christopher
3 Lumet, Sidney
4 Spielberg, Steven
5 Jackson, Peter
6 Tarantino, Quentin
head(names.ordered[idx, ])
# [1] "Abrahamson, Lenny" "Allers, Roger" "Anderson, Paul Thomas" "Anderson, Wes" "Anno, Hideaki" "Aronofsky, Darren"
如果你想重新排列的順序names.ordered使用sort():
names.ordered$Directors <- sort(names.ordered$Directors)
head(names.ordered$Directors)
# [1] "Abrahamson, Lenny" "Allers, Roger" "Anderson, Paul Thomas" "Anderson, Wes" "Anno, Hideaki" "Aronofsky, Darren"
tail(names.ordered$Directors)
# [1] "Wong, Kar-Wai" "Wyler, William" "Yamada, Naoko" "Yates, David" "Zeller, Florian" "Zemeckis, Robert"
uj5u.com熱心網友回復:
我認為您的主要問題是您試圖對列進行排序。從資料框中提取元素的語法是x[i, j, ... , drop=TRUE] 或 X[j],其中i表示行和j列。注意在參考行時總是需要的逗號。由于您沒有使用逗號,R 認為您使用了X[j]并且您想要對列進行排序。所以order()在逗號前使用按行排序。
在“ order() ”呼叫中,只需輸入要從中獲取要重新排列資料框的順序的向量。
一個小問題是您只有一列,這會將結果強制轉換為盡可能低的維度(即在這種情況下為向量)。為了避免這種情況,有一個論點drop=FALSE。
names_ordered <- names[order(names$Directors), , drop=FALSE]
head(names_ordered)
# Directors
# 1 Darabont, Frank
# 2 Nolan, Christopher
# 3 Lumet, Sidney
# 4 Spielberg, Steven
# 5 Jackson, Peter
# 6 Tarantino, Quentin
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/380670.html
下一篇:如何從R中的資料集創建贏/輸記錄
