簡體   English   中英

根據R中的索引列從data.frame中獲取值

[英]Getting values out of a data.frame based on an index column in R

我試圖使“當前”列成為“索引”中包含的列中該行中的值

如果我的data.frame數據如下所示:

         X1   X2  X3  X4  X5  X6  X7  X8  X9  X10  index current 
A        01   02  03  04  05  06  07  08  09  99   1      01     
B        0    1   2   3   4   5   6   7   99  NA   1      0      
C        00   10  11  12  13  14  15  16  17  99   5      13     
D        1    2   3   4   5   6   99  NA  NA  NA   2      2     
E        1    2   99  NA  NA  NA  NA  NA  NA  NA   3      99     
F        1    2   99  NA  NA  NA  NA  NA  NA  NA   1      1      
G        1    2   3   4   5   6   7   8   9   99   1      1     
H        1    2   3   4   5   6   7   8   99  NA   1      1    

我希望Data ['C','current']為'13',因為Data ['C','index'] = 5的索引,因此它將在Data ['C',5]中尋找值

我手動使current具有我希望它們具有的值,但是我似乎無法弄清楚它是如何完成的

數據

Data <- structure(list(X1 = c("01", "0", "00", "1", "1", "1", "1", "1"), 
X2 = c("02", "1", "10", "2", "2", "2", "2", "2"), 
X3 = c("03", "2", "11", "3", "99", "99", "3", "3"), 
X4 = c("04", "3", "12", "4", NA, NA, "4", "4"), 
X5 = c("05", "4", "13", "5", NA, NA, "5", "5"), 
X6 = c("06", "5", "14", "6", NA, NA, "6", "6"), 
X7 = c("07", "6", "15", "99", NA, NA, "7", "7"), 
X8 = c("08", "7", "16", NA, NA, NA, "8", "8"), 
X9 = c("09", "99", "17", NA, NA, NA, "9", "99"), 
X10 = c("99", NA, "99", NA, NA, NA, "99", NA), 
index = c("1", "1", "5", "2", "3", "1", "1", "1"), 
current = c("01", "0", "13", "2", "99", "1", "1", "1")), 
.Names = c("X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10", "index", "current"), 
class = "data.frame", row.names = c("A", "B", "C", "D", "E", "F", "G", "H"))

嘗試簡單索引

Data$current <- Data[cbind(1:nrow(Data), Data$index)]

基本上,您是將行與index指定的列綁定,然后從Data提取它們

數據

Data <- structure(list(X1 = c("01", "0", "00", "1", "1", "1", "1", "1"), 
X2 = c("02", "1", "10", "2", "2", "2", "2", "2"), 
X3 = c("03", "2", "11", "3", "99", "99", "3", "3"), 
X4 = c("04", "3", "12", "4", NA, NA, "4", "4"), 
X5 = c("05", "4", "13", "5", NA, NA, "5", "5"), 
X6 = c("06", "5", "14", "6", NA, NA, "6", "6"), 
X7 = c("07", "6", "15", "99", NA, NA, "7", "7"), 
X8 = c("08", "7", "16", NA, NA, NA, "8", "8"), 
X9 = c("09", "99", "17", NA, NA, NA, "9", "99"), 
X10 = c("99", NA, "99", NA, NA, NA, "99", NA), 
index = c("1", "1", "5", "2", "3", "1", "1", "1"), 
current = c("01", "0", "13", "2", "99", "1", "1", "1")), 
.Names = c("X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10", "index", "current"), 
class = "data.frame", row.names = c("inclass", "childage", "high_edu", "ref_race", "hisp_ref", "bls_urbn", "fam_type", "earncomp"))

編輯:

根據新提供的數據, index似乎是類character ,因此您不能將其作為列索引傳遞,請嘗試此較小的修復方法

Data$current <- Data[cbind(1:nrow(Data), as.numeric(Data$index))]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM