我使用dataframe df
Name = c("Albert", "Caeser", "Albert", "Frank")
Earnings = c(1000,2000,1000,5000)
df = data.frame(Name, Earnings)
Name Earnings
Albert 1000
Caesar 2000
Albert 1000
Frank 5000
如果我使用tapply函数
result <- tapply(df$Earnings, df$Name, sum)
我得到此表结果
Albert 2000
Caeser 2000
Frank 5000
在任何情况下,表格&#34;结果&#34;如果我使用如上所述的tapply函数,则不会按字母顺序排序?
当我试图找到答案时,我改变了行的顺序:
Name Earnings
Frank 5000
Caeser 2000
Albert 1000
Albert 1000
但仍然得到相同的结果。
我使用多个函数,我用tapply计算的输出计算,我必须绝对确定,输出始终以相同的顺序传递。
答案 0 :(得分:1)
通常输出是有序的,但你可以提出不是的例子。例如,如果您有无序级别的因子。
df <- data.frame(Name = factor(c('Ben', 'Al'), levels = c('Ben', 'Al')),
Earnings = c(1, 4))
tapply(df$Earnings, df$Name, sum)
## Ben Al
## 1 4
在这种情况下,您可以使用as.character
或(可能是保护程序)对结果进行排序。
tapply(df$Earnings, as.character(df$Name), sum)
## Al Ben
## 4 1
result <- tapply(df$Earnings, df$Name, sum)
result[order(names(result))]
## Al Ben
## 4 1
另一个可能的问题可能是前导空格:
df <- data.frame(Name = c(' Ben', 'Al'),
Earnings = c(1, 4))
tapply(df$Earnings, df$Name, sum)
## Ben Al
## 1 4
在这种情况下,只需删除所有前导空格即可获得排序结果。
答案 1 :(得分:0)
您可以在R中订购任何数组时订购sapply
输出。使用[sort]命令。1
> result
Albert Caeser Frank
2000 2000 5000
> sort(result,decreasing=TRUE)
Frank Albert Caeser
5000 2000 2000
根据您要订购的内容,您可以按上面所示对值进行排序(将decreasing
保留为NULL,即sort(result)
您将按递增顺序获取值),或者排序姓名:
这将按反向字母顺序按name
传递结果
result[sort(names(result),decreasing=TRUE)]
Frank Caeser Albert
5000 2000 2000
您还想要排序和订购什么?