मैं 5 अलग-अलग डेटाफ्रेम से भरी सूची को सॉर्ट करने की कोशिश कर रहा हूं, लेकिन समान कॉलम नामों के साथ, लेकिन बस अलग-अलग व्यवस्थाओं के साथ।

प्रतिलिपि प्रस्तुत करने योग्य उदाहरण:

d1 <- data.frame(y1 = c(1, 2, 3), y2 = c(4, 5, 6), y3 = c(5,6,7))
d2 <- data.frame(y2 = c(3, 2, 1), y3 = c(6, 5, 4), y1 = c(5,6,7))

my.list <- list(d1, d2)

> my.list
[[1]]
  y1 y2 y3
1  1  4  5
2  2  5  6
3  3  6  7

[[2]]
  y2 y3 y1
1  3  6  5
2  2  5  6
3  1  4  7 

मैं सूची के भीतर प्रत्येक डेटाफ्रेम कॉलम को एक विशिष्ट क्रम में व्यवस्थित करने का प्रयास कर रहा हूं जिसे मैंने पहले से ही colnamesvec के तहत बनाया है (नीचे देखें।)

colnamesvec <- c("y3", "y2", "y1")

यदि मैं प्रत्येक व्यक्तिगत डेटाफ्रेम को सबसेट करता हूं, तो मैं बेस आर कमांड का उपयोग करके इसे प्राप्त करने में सक्षम हूं। लेकिन क्या मैं जो चाहता हूं उसे हासिल करने के लिए आसानी से लूप करने का कोई बेहतर तरीका है?

s <- my.list[[1]]
s[colnamesvec]

शुक्रिया!

r
0
Javier 30 नवम्बर 2018, 05:20

1 उत्तर

सबसे बढ़िया उत्तर

lapply का उपयोग करें और प्रत्येक डेटाफ़्रेम के लिए स्तंभों को पुन: व्यवस्थित करें।

my.list[] <- lapply(my.list, function(x) x[colnamesvec])


my.list
#[[1]]
#  y3 y2 y1
#1  5  4  1
#2  6  5  2
#3  7  6  3

#[[2]]
#  y3 y2 y1
#1  6  3  5
#2  5  2  6
#3  4  1  7

यह माना जा रहा है कि colnamesvec में सभी कॉलम सूची में प्रत्येक डेटाफ्रेम में मौजूद हैं।

2
Ronak Shah 30 नवम्बर 2018, 05:22