对于以下数据集,
mydat=data.frame(sl=c(1,3,8,10,4,6,5,7,2,9),x=c(50,42,15,49,56,30,66,52,40,38))
mydat
sl x
1 1 50
2 3 42
3 8 15
4 10 49
5 4 56
6 6 30
7 5 66
8 7 52
9 2 40
10 9 38
我想根据sl
的位置创建另一列,新列的第一个值是xval
应该是50
,第二个值是40
,第三个值为42
。因此,新列应类似于xval=50,40,42,56,...,49
。
任何帮助表示赞赏。
答案 0 :(得分:2)
使用data.table
require(data.table); setDT(mydat)
mydat[, New := x[order(sl)]]
使用Base R
Onyambu的贡献:
transform(mydat,New = x[order(sl)])
或者:
mydat$New = mydat$x[order(mydat$sl)]
结果
> mydat
sl x New
1: 1 50 50
2: 3 42 40
3: 8 15 42
4: 10 49 56
5: 4 56 66
6: 6 30 30
7: 5 66 52
8: 7 52 15
9: 2 40 38
10: 9 38 49