我的目标是创建一个包含列索引指示的值的新变量。
c <- rep(1:2)
d <- rep(1:10)
e <- c(1,5,7,2,3,9,1,6,9,1)
z <- cbind(d,e,c)
我想创建一个新变量(f),它是c的列索引所指示的值。
d e c f
1 1 1 1
2 5 2 5
3 7 1 3
4 2 2 2
5 3 1 5
6 9 2 9
7 1 1 7
8 6 2 6
9 9 1 9
10 1 2 1
答案 0 :(得分:2)
我们可以使用行/列索引从'z'的前2列中提取元素,其中行索引是行的序列,列索引是来自matrix
'z的'c'列“
cbind(z, f = z[,1:2][cbind(seq_len(nrow(z)), z[,"c"])])
# d e c f
# [1,] 1 1 1 1
# [2,] 2 5 2 5
# [3,] 3 7 1 3
# [4,] 4 2 2 2
# [5,] 5 3 1 5
# [6,] 6 9 2 9
# [7,] 7 1 1 7
# [8,] 8 6 2 6
# [9,] 9 9 1 9
#[10,] 10 1 2 1
答案 1 :(得分:1)
选项可以使用mapply
来获得所需的输出。
cbind(z, f = mapply(function(x,y)z[y,x], z[,"c"], 1:nrow(z)))
# d e c f
# d 1 1 1 1
# e 2 5 2 5
# d 3 7 1 3
# e 4 2 2 2
# d 5 3 1 5
# e 6 9 2 9
# d 7 1 1 7
# e 8 6 2 6
# d 9 9 1 9
# e 10 1 2 1