我有两个变量(数据帧)。一个是Transcolmax(数据帧1),另一个是Transcolmean(数据帧2)。我想根据Transcolmax(数据帧1)安排Transcolmean(数据帧2)。 dataframes表如下。第三个表不是所需的输出。 Forth表是所需的输出。我只是为了更好地理解而放置第三张表。我想使用相同的[3:3]矩阵(dput)
重新创建另一个文件Transcolmax(dataframe 1)
MSFT 10 7 11
AAPL 12 6 5
GOOGL 9.5 11 8
Transcolmean (dataframe 2)
MSFT 2 1.5 3
AAPL 1 1.2 2.5
GOOGL 5 1 1.7
Arrange companies according to Transcolmax (high to low)
AAPL GOOGL MSFT
MSFT MSFT GOOGL
GOOGL AAPL AAPL
Arrange Transcolmean varience according to Transcolmax (high to low) (desired output)
1 1 3
2 1.5 1.7
5 1.2 2.5
答案 0 :(得分:1)
df1 = read.table(text="MSFT 10 7 11
AAPL 12 6 5
GOOGL 9.5 11 8")
df2 = read.table(text="MSFT 2 1.5 3
AAPL 1 1.2 2.5
GOOGL 5 1 1.7")
df2[,1]<-NULL
df1[,1]<-NULL
for(i in 1:ncol(df1))
{
df2[,i] = df2[order(df1[,i],decreasing=TRUE),i]
}
输出:
1 1 3
2 1.5 1.7
5 1.2 2.5
答案 1 :(得分:0)
我们可以使用mapply
来执行此操作
mapply(function(x, y) y[order(-x)], as.data.frame(Transcolmax[,-1]),
as.data.frame(Transcolmean[,-1]))
# v2 v3 v4
#[1,] 1 1.0 3.0
#[2,] 2 1.5 1.7
#[3,] 5 1.2 2.5
Transcolmax <- structure(list(v1 = c("MSFT", "AAPL", "GOOGL"), v2 = c(10, 12,
9.5), v3 = c(7L, 6L, 11L), v4 = c(11L, 5L, 8L)), .Names = c("v1",
"v2", "v3", "v4"), class = "data.frame", row.names = c(NA, -3L
))
Transcolmean<- structure(list(v1 = c("MSFT", "AAPL", "GOOGL"), v2 = c(2L, 1L,
5L), v3 = c(1.5, 1.2, 1), v4 = c(3, 2.5, 1.7)), .Names = c("v1",
"v2", "v3", "v4"), class = "data.frame", row.names = c(NA, -3L
))