我想通过仅使用apply和avoid循环来实现以下结果:
dA是一个数据框,我想订购(排序)每行dA的特定元素。我要排序的元素列在列表中。
例如:
Elements[[1]] = c(1,3,4,8)
Elements[[2]] = c(2,3,4,5,6,7,9)
所以结果应该是一个列表dA_new,其中第一行元素{1,3,4,8}被排序,第二行元素{2,3,4,5,6,7,9}排序。 由于Elements有很多行,我想避免循环。
谢谢!
答案 0 :(得分:0)
好的,我现在有了问题。 您必须使用Map(只是lapply的多维版本)应用于数据框的每一列,列表的每个元素以过滤正确的行。 然后你必须在结果列表上使用apply来排序
a=c(900, 800, 1000, 100, 1100, 600, 200, 1200, 1300, 400)
b = c(400, 200, 100, 900, 700, 300, 600, 1000, 1100, 500)
dA<-data.frame(rbind(a,b))
dA
Elements<-list()
Elements[[1]] = c(1,3,4,8)
Elements[[2]] = c(2,3,4,5,6,7,9)
lapply(Map("[",as.data.frame(t(dA)),Elements),sort)
答案 1 :(得分:0)
我认为这会做你想要的......
mapply(function(x,y) sort(x[y]), as.data.frame(t(dA)), Elements)
$`1`
[1] 100 900 1000 1200
$`2`
[1] 100 200 300 600 700 900 1100