Reputation: 11386
I have got two data frames.
daf <- data.frame (A = 1:10, J = 1:10, E = 11:20, D = 21:30, C= 41:50, B = 61:70, L = 3:12)
df2 <- data.frame (nam = c("A", "B", "C", "E", "D"), sn = 1:5)
> df2
nam sn
1 A 1
2 B 2
3 C 3
4 E 4
5 D 5
> daf
A J E D C B L
1 1 1 11 21 41 61 3
2 2 2 12 22 42 62 4
3 3 3 13 23 43 63 5
4 4 4 14 24 44 64 6
5 5 5 15 25 45 65 7
6 6 6 16 26 46 66 8
7 7 7 17 27 47 67 9
8 8 8 18 28 48 68 10
9 9 9 19 29 49 69 11
10 10 10 20 30 50 70 12
I would like to pickup only variable names listed in nam of df2. I would like to preserve the order of df2.
daf.n <- colnames(daf)
df2.n <- df2[,1]
daf[df2.n%in%colnames(daf),]
A J E D C B L
1 1 1 11 21 41 61 3
2 2 2 12 22 42 62 4
3 3 3 13 23 43 63 5
4 4 4 14 24 44 64 6
5 5 5 15 25 45 65 7
6 6 6 16 26 46 66 8
7 7 7 17 27 47 67 9
8 8 8 18 28 48 68 10
9 9 9 19 29 49 69 11
10 10 10 20 30 50 70 12
Above do the first job but do not order the columns in order they are arranged in df2 column nam. Any idea ?
Upvotes: 1
Views: 54
Reputation: 18500
Not need for %in%
:
daf <- data.frame (A = 1:10, J = 1:10, E = 11:20, D = 21:30, C= 41:50, B = 61:70, L = 3:12)
df2 <- data.frame (nam = c("A", "B", "C", "E", "D"), sn = 1:5)
daf[,as.character(df2$nam)]
Note that your example data.frames are slightly altered here.
Upvotes: 2