我们假设我们在R中有以下数据框:
DF <- as.data.frame.matrix(matrix(sample(1:15,15),ncol=5,nrow=3))
V1 V2 V3 V4 V5
1 15 8 3 14 4
2 11 2 5 13 6
3 9 7 10 12 1
我正在尝试检索每行前三个值的列名。我想获得一个包含以下信息的新数据框:
1 V1 V4 V2
2 V4 V1 V5
3 V4 V3 V1
我尝试使用apply和dapply但它不起作用。我设计了一个在apply中使用的函数,但它没有按预期工作。你能不能给我任何暗示来解决这个问题。我认为this应该有所帮助。
答案 0 :(得分:2)
我们可以循环遍历行(apply
和MARGIN=1
),使用order
逐渐获取行中元素的数字索引,使用它来排序列名,获取使用head
的前3个元素,转置输出并转换为data.frame
。
as.data.frame(t(apply(DF, 1, function(x)
head(names(DF)[order(-x)],3))), stringsAsFactors=FALSE)
# V1 V2 V3
#1 V1 V4 V2
#2 V4 V1 V5
#3 V4 V3 V1