我在使用apply函數(我認爲這是正確的方式來執行以下操作)跨多個數據幀。在多個數據幀中使用「應用」功能
一些示例數據(3個不同的數據幀,但我工作的問題有50以上):
biz <- data.frame(
country = c("england","canada","australia","usa"),
businesses = sample(1000:2500,4))
pop <- data.frame(
country = c("england","canada","australia","usa"),
population = sample(10000:20000,4))
restaurants <- data.frame(
country = c("england","canada","australia","usa"),
restaurants = sample(500:1000,4))
這裏就是我最終想要做的:
1)排序吃數據幀從最大到最小,根據該隨機配備可變
dataframe <- dataframe[order(dataframe$VARIABLE,)]
2)然後創建矢量可變,讓我每個
秩dataframe$rank <- 1:nrow(dataframe)
3)然後創建另一個數據框,其中包含一列國家和每個感興趣變量的排名作爲其他列。東西會看起來像(排名都不是真正的在這裏):
country.rankings <- structure(list(country = structure(c(5L, 1L, 6L, 2L, 3L, 4L), .Label = c("brazil",
"canada", "england", "france", "ghana", "usa"), class = "factor"),
restaurants = 1:6, businesses = c(4L, 5L, 6L, 3L, 2L, 1L),
population = c(4L, 6L, 3L, 2L, 5L, 1L)), .Names = c("country",
"restaurants", "businesses", "population"), class = "data.frame", row.names = c(NA,
-6L))
所以我猜有把每個數據幀連成一個列表的方式,是這樣的:
lib <- c(biz, pop, restaurants)
然後做一個拉普利跨越1)排序,2)創建排名變量和3)爲每個國家/地區創建每個變量(企業數量,人口規模,餐館數量)的排名矩陣或數據框。問題我遇到的是寫lapply功能,當我嘗試通過可變訂購框架運行到問題的每個數據進行排序:
sort <- lapply(lib,
function(x){
x <- x[order(x[,2]),]
})
返回錯誤信息:
Error in `[.default`(x, , 2) : incorrect number of dimensions
因爲我試圖將列標題應用於列表。但是,怎麼回事我會解決這個問題時,變量名是每個數據幀的不同(但要注意的是,國名是一致的保持)
(也很想知道如何使用這個使用plyr)
我相信它應該是'lib < - list(biz,pop,restaurants)'。並且,也許類似'cbind(as.character(biz [,1]),do.call(cbind,lapply(lib,function(x)order(x [,2])))''? –