我在R中有一个数据框,它有一个包含四个数字的列表类型列:
Size
Ford 1,2,3,4
Gm 2,3,5,6
Nissan 2,3,4,5
Toyota 1,2,2,4
这里的汽车名称(福特等)是行名称,大小(“1,2,3,4”等)是一列列表。
我想按列大小中的第3个数字对此数据框进行排序,以便得到以下结果:
Size
Toyota 1,2,2,4
Ford 1,2,3,4
Nissan 2,3,4,5
Gm 2,3,5,6
在一个完整的例子中,每行有很多列,但我仍然希望按“大小”列中的第3个值进行排序。
答案 0 :(得分:4)
下面的内容会起作用 - 我会先重新制作数据:
dat <- data.frame(
ID=1:4,
Size=I(list(1:4,c(2,3,5,6),2:5,c(1,2,2,4))),
row.names=c("Ford","Gm","Nissan","Toyota")
)
看起来像:
ID Size
Ford 1 1, 2, 3, 4
Gm 2 2, 3, 5, 6
Nissan 3 2, 3, 4, 5
Toyota 4 1, 2, 2, 4
然后订购:
dat[order(sapply(dat$Size,"[",3)),]
ID Size
Toyota 4 1, 2, 2, 4
Ford 1 1, 2, 3, 4
Nissan 3 2, 3, 4, 5
Gm 2 2, 3, 5, 6