根据 R 中的索引列从 data.frame 中获取值
Getting values out of a data.frame based on an index column in R
我试图让 'current' 列成为 'index'
中包含的列中该行的值
如果我的 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
似乎属于 class character
,因此您不能将其作为列索引传递,试试这个小修复程序
Data$current <- Data[cbind(1:nrow(Data), as.numeric(Data$index))]
我试图让 'current' 列成为 'index'
中包含的列中该行的值如果我的 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
似乎属于 class character
,因此您不能将其作为列索引传递,试试这个小修复程序
Data$current <- Data[cbind(1:nrow(Data), as.numeric(Data$index))]