首页 > 解决方案 > R. 从 df A 中获取第一行与 df B 的元素匹配的列

问题描述

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

一种

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 行的子集:

2
13
16

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

一种

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

标签: rdataframesubset

解决方案


试试这个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))

推荐阅读