我需要重新排序类似于下面的数据框。我需要伦敦首先出现在任何不同的Var中,但保持var顺序非常重要(“pop,gdp,lifespec ......),因为我之后正在进行矩阵代数。
City Var value
Chicago pop 0.08
London pop 0.24
Paris pop 0.75
Chicago gdp 0.55
London gdp 0.49
Paris gdp 0.23
Chicago lifespec 0.45
London lifespec 0.39
Paris lifespec 0.28
Chicago percjobs 0.12
London percjobs 0.13
Paris percjobs 0.01
所以我想要的输出如下:
City Var value
London pop 0.24
Chicago pop 0.08
Paris pop 0.75
London gdp 0.49
Chicago gdp 0.55
Paris gdp 0.23
London lifespec 0.39
Chicago lifespec 0.45
Paris lifespec 0.28
London percjobs 0.13
Chicago percjobs 0.12
Paris percjobs 0.01
我尝试创建一个df$rank
,其值为1到伦敦和其他9。然后我尝试使用sort()
,但所有伦敦价值都在顶部崩溃。你有什么想法吗?
答案 0 :(得分:2)
在这里收集对这个问题的评论,以提供一个简单的双线。
d <- read.table(text='City Var value
Chicago pop 0.08
London pop 0.24
Paris pop 0.75
Chicago gdp 0.55
London gdp 0.49
Paris gdp 0.23
Chicago lifespec 0.45
London lifespec 0.39
Paris lifespec 0.28
Chicago percjobs 0.12
London percjobs 0.13
Paris percjobs 0.01', header=T)
d$Var <- factor(d$Var, unique(d$Var))
d[order(d$Var, d$City != "London"), ]
# City Var value
# 2 London pop 0.24
# 1 Chicago pop 0.08
# 3 Paris pop 0.75
# 5 London gdp 0.49
# 4 Chicago gdp 0.55
# 6 Paris gdp 0.23
# 8 London lifespec 0.39
# 7 Chicago lifespec 0.45
# 9 Paris lifespec 0.28
# 11 London percjobs 0.13
# 10 Chicago percjobs 0.12
# 12 Paris percjobs 0.01
答案 1 :(得分:0)
df$City <- factor(df$City, levels = c('London', 'Chicago', 'Paris'))
df$Cityf <- as.numeric(df$City)
df$Var <- factor(df$Var, levels = c('pop', 'gdp', 'lifespec', 'percjobs'))
df$Varv <- as.numeric(df$Var)
df[order(df$Varv, df$Cityf), ]
df1 <- df[order(df$Varv, df$Cityf), ]
df1[,c(1,2,3)]
City Var value
2 London pop 0.24
1 Chicago pop 0.08
3 Paris pop 0.75
5 London gdp 0.49
4 Chicago gdp 0.55
6 Paris gdp 0.23
8 London lifespec 0.39
7 Chicago lifespec 0.45
9 Paris lifespec 0.28
11 London percjobs 0.13
10 Chicago percjobs 0.12
12 Paris percjobs 0.01
我正在使用dplyr_0.2表示法