我有一个没有这样的列名的数据框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
答案 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))