R.从DF A中获取第一行与DF B的元素匹配的列

时间:2020-09-21 15:45:56

标签: r dataframe subset

我有一个没有这样的列名的数据框A(实际的列有1808列和〜1300000行):

A

1    1    2    2    6    6    13    13    16    16
0    0    1    0    2    1    0    1    1    0
0    1    2    0    1    2    0    1    0    0
1    1    1    0    1    1    0    2    2    1

我也有一个只有一列的数据框B(实际的是407行),其中的观察结果是A中第1行的子集:

B

2
13
16

我想得到一个数据框C,其中A中的列与B中的观察值匹配。我会得到:

A

2    2    13    13    16    16
1    0    0    1    1    0
2    0    0    1    0    0
1    0    0    2    2    1

1 个答案:

答案 0 :(得分:2)

尝试使用此base R方案。您可以使用which()来检测所需的值,然后可以按列进行选择。想要使用A的第一行时,请使用A[1,],对于B的值(因为它是一列),可以使用B[,1,drop=T]。这里的代码:

#Code
A[,which(A[1,] %in% B[,1,drop=T])]

输出:

  V3 V4 V7 V8 V9 V10
1  2  2 13 13 16  16
2  1  0  0  1  1   0
3  2  0  0  1  0   0
4  1  0  0  2  2   1

使用了一些数据:

#Data 1
A <- structure(list(V1 = c(1L, 0L, 0L, 1L), V2 = c(1L, 0L, 1L, 1L), 
    V3 = c(2L, 1L, 2L, 1L), V4 = c(2L, 0L, 0L, 0L), V5 = c(6L, 
    2L, 1L, 1L), V6 = c(6L, 1L, 2L, 1L), V7 = c(13L, 0L, 0L, 
    0L), V8 = c(13L, 1L, 1L, 2L), V9 = c(16L, 1L, 0L, 2L), V10 = c(16L, 
    0L, 0L, 1L)), class = "data.frame", row.names = c(NA, -4L
))

#Data 2
B <- structure(list(V1 = c(2L, 13L, 16L)), class = "data.frame", row.names = c(NA, 
-3L))