Ash*_*Ash 4 sorting r dataframe
在数据框中选择行然后对它们进行排序这一看似微不足道的任务正在躲避我,同时也让我发疯.例如,让我们有一个简单的数据框:
country = c("US", "US", "CA", "US")
company = c("Apple", "Google", "RIM", "MS")
vals = c(100, 70, 50, 90)
df <- data.frame(country, company, vals)
Run Code Online (Sandbox Code Playgroud)
让我们按val命令
> df[order(vals),]
country company vals
3 CA RIM 50
2 US Google 70
4 US MS 90
1 US Apple 100
Run Code Online (Sandbox Code Playgroud)
完美的工作.让我们现在尝试只选择美国公司,并订购价值.我们得到了一些虚假的结果.
> df[country=="US", ][order(vals),]
country company vals
4 US MS 90
2 US Google 70
NA <NA> <NA> NA
1 US Apple 100
Run Code Online (Sandbox Code Playgroud)
让我们订购,然后选择.再次,一个虚假的结果
> df[order(vals),][country=="US", ]
country company vals
3 CA RIM 50
2 US Google 70
1 US Apple 100
Run Code Online (Sandbox Code Playgroud)
如何获得仅包含美国公司的数据框,并按val排序?
不确定是否可以通过一组子集调用来执行此操作[,因为您需要在第二个子集调用中引用有序或缩减的数据帧.一种方法是对数据进行排序并提供此数据subset()以从此有序数据框中选择行:
> with(df, subset(df[order(vals),], subset = country == "US"))
country company vals
2 US Google 70
4 US MS 90
1 US Apple 100
Run Code Online (Sandbox Code Playgroud)
我总是觉得奇怪的是,基本R没有方便重新排序数据帧,就像它用于子集化一样.所以我写了自己的:
library(plyr)
arrange(subset(df, country == "US"), vals)
Run Code Online (Sandbox Code Playgroud)