R 按两列重新排列数据帧
如何通过降低列R 按两列重新排列数据帧,r,dataframe,R,Dataframe,如何通过降低列value中值的顺序排列数据帧,其中列中的值“cat”=X 数据帧 df1<-data.frame(group=rep(c("A", "B", "C", "D"),each=2), cat=rep(c("X", "Y"),4), value=c(1,0.6,1,0.5,1,2,1,5)) df1由于cat'x'的value总是相同的,我们可以按group对值进行求和,然后使用该值对数据进行排序 # Create data.frame df1<-data.frame(g
value
中值的顺序排列数据帧,其中列中的值“cat”=X
数据帧
df1<-data.frame(group=rep(c("A", "B", "C", "D"),each=2), cat=rep(c("X", "Y"),4), value=c(1,0.6,1,0.5,1,2,1,5))
df1由于cat'x'
的value
总是相同的,我们可以按group
对值进行求和,然后使用该值对数据进行排序
# Create data.frame
df1<-data.frame(group=rep(c("A", "B", "C", "D"),each=2),
cat=rep(c("X", "Y"),4),
value=c(1,0.6,1,0.5,1,2,1,5))
# Sum values by group (since x is same...)
df2 <- aggregate(df1$value, by=list(group=df1$group), FUN=sum)
# Join tables
library(plyr)
output <- join(df1, df2, by='group', type='left', match='all')
# Sort
output <- output[with(output, order(-x, cat)),]
@Pyl dupe中唯一缺失的部分是OP需要重新排列系数组
,即df1$组的级别
# Limit to only cat=Y
df2 <- df1[which(df1$cat=='Y'),]
# Order by descending
df2 <- df2[order(-df2$value),]
# Create a vector based on group column
order_vector <- df2[,'group']
# Use vector from above to designate new factor levels
df1$group <- factor(df1$group, levels = order_vector)
# Sort
output2 <- df1[with(df1, order(group, cat)), ]