R 订购源数据帧,在输出数据帧中存储id列

R 订购源数据帧,在输出数据帧中存储id列,r,loops,sorting,R,Loops,Sorting,我有一个大约80x300的数据帧。看起来是这样的: id var1 var2 var3 ... Alpha 23 68 22 Bravo 29 48 37 Hotel 39 10 85 ... 我的目标是获得一个输出数据帧,它与源数据帧具有相同的列,但不是值,而是按秩顺序使用id值的名称。它应该看起来像这个id在完成时会被删除为不必要的东西 id

我有一个大约80x300的数据帧。看起来是这样的:

id          var1     var2     var3     ...
Alpha       23       68       22
Bravo       29       48       37
Hotel       39       10       85
...
我的目标是获得一个输出数据帧,它与源数据帧具有相同的列,但不是值,而是按秩顺序使用id值的名称。它应该看起来像这个id在完成时会被删除为不必要的东西

id          var1     var2     var3
            Hotel    Alpha    Hotel
            Bravo    Bravo    Bravo
            Alpha    Hotel    Alpha
我已尝试通过以下方式进行此操作:

rank <- read.csv()
out <- rank[0,]  # to create output data frame with exact same columns as source

for (i in 1:ncol(rank)) {
  order(rank[i])  # sort source dataframe by i'th column
  out[i] <- rank$id_column  # store id_column (after re-ranking) as i'th column in output dataframe
}
当我运行orderrank[I]时,它似乎工作正常,但当我运行循环时,要么没有结果,要么出现错误:

替换有X行,数据有0行


我想用这种方式在列中循环,但我也有其他选择。谁能帮我找出我做错了什么?我知道我可能还得担心以后的上升或下降,所以如果有人能接触到这一点,那就太好了,但我可以在事后弄清楚这一部分

我们可以通过在列上循环来实现这一点,获得秩并使用它来子集“ID”

data.frame(lapply(df1[-1], function(x) df1$id[rank(-x)]))
还是有秩序

像这样的

apply(df[,-1], 2, function(x) df$id[order(x)])
# var1    var2    var3   
# [1,] "Alpha" "Hotel" "Alpha"
# [2,] "Bravo" "Bravo" "Bravo"
# [3,] "Hotel" "Alpha" "Hotel"
资料

使用mapply


我知道你想要相反的顺序,然后用-xThanks作为你的答案。当我尝试运行它时,我在秩[,-1]中得到这个错误:“closure”类型的对象是不可子集的。你知道问题出在哪里吗?我试图删除该部分以删除第一列,但仍然得到相同的错误。对不起,我将递减参数放在错误的位置!
apply(df[,-1], 2, function(x) df$id[order(x)])
# var1    var2    var3   
# [1,] "Alpha" "Hotel" "Alpha"
# [2,] "Bravo" "Bravo" "Bravo"
# [3,] "Hotel" "Alpha" "Hotel"
df <- read.table(text="
id,var1,var2,var3
Alpha,23,68,22
Bravo,29,48,37
Hotel,39,10,85
", header=T, sep=',', stringsAsFactors=F)
# Dummy data
df = data.frame(id=c("Alpha", "Bravo", "Hotel"),
                var1=c(23, 29, 39),
                var2=c(68, 48, 10),
                var3=c(22, 37, 85))

# Sorting function
sorting_hat = function(i){
   df$id[order(i, decreasing=T)]
}

# Your "loop"
df_new = mapply(sorting_hat, df[, -1])