我有一个数据框
names2 <- c('AdagioBarber','AdagioBarber', 'Beethovan','Beethovan')
Value <- c(33,55,21,54)
song.data <- data.frame(names2,Value)
我想根据这个角色载体安排它
names <- c('Beethovan','Beethovan','AdagioBarber','AdagioBarber')
我正在使用match()来实现这个
data.frame(song.data[match((names), (song.data$names2)),])
问题是匹配仅返回第一次出现
names2 Value
3 Beethovan 21
3.1 Beethovan 21
1 AdagioBarber 33
1.1 AdagioBarber 33
答案 0 :(得分:1)
您可以使用order
,正如@ zx8754和@Evan Friedland指出的那样。
> name.order <- c('Beethovan','AdagioBarber')
> song.data$names2 <- factor(song.data$names2, levels= name.order)
> song.data[order(song.data$names2), ]
names2 Value
3 Beethovan 21
4 Beethovan 54
1 AdagioBarber 33
2 AdagioBarber 55
基本上,factor
将字符串转换为整数,并创建一个查找表,其中整数对应于哪些字符串。 levels
参数指定您希望查找表的内容。没有这个论点,它只会按照出现顺序排列。
例如:
> as.numeric(factor(letters[1:5]))
[1] 1 2 3 4 5
> as.numeric(factor(letters[1:5], levels=c("d","b","e","a","c")))
[1] 4 2 5 1 3
注意:您需要绝对确保在name.order
向量中获得所有(正确拼写的)级别,否则您最终将获得NA
&#39 ; s在order
的输出中。
(我不确定为什么sort
无法对因子进行排序,但事实就是如此。)