通过使用R指定列索引返回行的值

通过使用R指定列索引返回行的值,r,dataframe,R,Dataframe,我有以下数据帧(DF_A): 我还有另一个数据帧(DF_B),其中包含我在DF_A中需要的列的位置。这是DF_B: PARTY_ID POS_1 POS_2 P1 1 2 P2 2 1 P3 3 1 P4 2 1 P5 1 4 我需要给出获取DF_A值的列(DF_B)的位置。期望的结果如下: PARTY_ID V1 V2 P1 0 0 P2 1 2 P3 0 0 P4 1 2 P5 1 1 我正在尝试使用哪个函数,但它似乎不起作用。 有人能帮我吗 旁注:我需要以最快的方式

我有以下数据帧(DF_A):

我还有另一个数据帧(DF_B),其中包含我在DF_A中需要的列的位置。这是DF_B:

PARTY_ID POS_1 POS_2
P1  1  2
P2  2  1
P3  3  1
P4  2  1
P5  1  4
我需要给出获取DF_A值的列(DF_B)的位置。期望的结果如下:

PARTY_ID V1 V2
P1 0 0
P2 1 2
P3 0 0
P4 1 2
P5 1 1
我正在尝试使用哪个函数,但它似乎不起作用。 有人能帮我吗


旁注:我需要以最快的方式完成此操作,因为我的实际数据有超过10万行。

使用
apply
from base R实现此操作的快速而肮脏的方式:

DF_C <- apply(DF_A, 1, function(x) {
  cols_to_use <- as.numeric(unlist(DF_B[DF_B$"PARTY_ID"==x["PARTY_ID"],2:3]))
  x[-1][cols_to_use]
}) 
DF_C <- cbind(DF_A$PARTY_ID,t(DF_C))
colnames(DF_C) <- c("PARTY_ID", "V1","V2")
DF_C
>ind t(sapply(1:nrow(ind),函数(i)DF_A[,-1][,ind[i,][i,]))
氧气
[1,] 0  0 
[2,] 1  2 
[3,] 0  0 
[4,] 1  2 
[5,] 1  1 
如果要获取data.frame,请执行以下操作:

> DF <- t(sapply(1:nrow(ind), function(i) DF_A[, -1][, ind[i,]][i,] ))
> data.frame(PARTY_ID=DF_A[,1], DF)
  PARTY_ID O1 O2
1       P1  0  0
2       P2  1  2
3       P3  0  0
4       P4  1  2
5       P5  1  1
DF data.frame(参与方ID=DF\u A[,1],DF) PARTY_ID O1 O2 1 P1 0 0 2 P2 1 2 3 p30 0 4 P4 1 2 5 P5 1
带有简单for循环的:

 DF_C <- DF_B        # creating dataframe with same dimension and column/row identifiers

 for(i in 1:nrow(DF_C)) { DF_C[i,] <- DF_A[i,as.numeric(DF_B[i,])] }         #over rows

DF_C嗨!我尝试了您的解决方案,但它返回以下错误:DF_A[,-1][,ind[I,]][I,]]:维度数不正确!这总是很好地工作,但现在我只有一列具有所需的列索引(DF_B只有一列)。当我尝试这个代码时它不起作用。你能帮我吗?DFU B不应该至少有两列吗?一个有ID,另一个有你想要选择的列?我可以解决它!我只是更改了cbind(DF_A$PARTY_ID,t(DF_C)[-1])的第二行。
。多谢各位!
> DF <- t(sapply(1:nrow(ind), function(i) DF_A[, -1][, ind[i,]][i,] ))
> data.frame(PARTY_ID=DF_A[,1], DF)
  PARTY_ID O1 O2
1       P1  0  0
2       P2  1  2
3       P3  0  0
4       P4  1  2
5       P5  1  1
 DF_C <- DF_B        # creating dataframe with same dimension and column/row identifiers

 for(i in 1:nrow(DF_C)) { DF_C[i,] <- DF_A[i,as.numeric(DF_B[i,])] }         #over rows