根据其他变量

时间:2017-07-21 07:08:21

标签: r variables

我有两个变量(数据帧)。一个是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

2 个答案:

答案 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
 ))