以字符串变量为条件对行重新排序

时间:2014-06-04 10:45:42

标签: r sorting row

我需要重新排序类似于下面的数据框。我需要伦敦首先出现在任何不同的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(),但所有伦敦价值都在顶部崩溃。你有什么想法吗?

2 个答案:

答案 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表示法