从列索引值创建新变量

时间:2018-03-31 14:19:04

标签: r

我的目标是创建一个包含列索引指示的值的新变量。

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

2 个答案:

答案 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