我想从不同的列中提取值,具体取决于列x
的值。该列位于数据帧1中,包含不同的因子级别(例如1,2,3,4,5,6)。我想从中提取值的列位于数据帧2中。两个数据帧的示例:
数据帧1称为istrata
(173行)
> istrata[1:5,]
POSCODN Geslacht Agegrp
1 2651 0.4761905 1
2 2651 0.4761905 5
3 2652 0.5785124 1
4 2652 0.5785124 1
5 2661 0.5270758 3
数据帧2称为strata
,带有(1721行):
> strata[1:5,]
POSCODN Geslacht agegrp_1 agegrp_2 agegrp_3 agegrp_4 agegrp_5 agegrp_6
1 2651 0.4761905 0.34085213 0.10025063 0.13784461 0.27318296 0.13784461 0.010025063
2 2652 0.5785124 0.34710744 0.23966942 0.11570248 0.19008264 0.10743802 0.000000000
3 2661 0.5270758 0.36462094 0.13357401 0.15162455 0.25270758 0.09747292 0.000000000
4 2662 0.6229508 0.39344262 0.26229508 0.11475410 0.21311475 0.01639344 0.000000000
5 2665 0.5387931 0.28448276 0.08189655 0.17241379 0.31465517 0.13362069 0.012931034
所以最后我希望实现这一点,当在数据帧1的第一行中,Agegrp
为1时,它会从第1行(因为类似的POSCODN)第3列({3)来计算数据帧2的值。 {1}})。另一个示例,数据帧1中的第5行位于agegrp_1
并且Agegrp 5
为2661.所以这里应该查看数据帧2和第4列中的第3行(POSCODN
)请参阅下面的数据框示例(agegrp_3
的补充):
istrata
有办法做到这一点吗?
非常感谢帮助!
答案 0 :(得分:2)
来自x <- c(3,2,1,1,1)
的帮助:
通过[单个参数索引数组时,我可以使用as作为矩阵 许多列,因为有x的尺寸;结果是一个向量 具有与i的每一行中的索引集相对应的元素。
因此子集可以是矩阵。第1列将是行,第2列将表示列。
如果x是1:nrow(df)
,我们可以将其与行cbind(1:nrow(df), x)
x
[1,] 1 3
[2,] 2 2
[3,] 3 1
[4,] 4 1
[5,] 5 1
合并。矩阵看起来像:
df[cbind(1:nrow(df), x)]
如果我们将此矩阵用于子集df[1,3]
,则第一次提取将为df[2,2]
,第二次提取将为Gender
,依此类推。但我们需要考虑x + 1
列,并在第二列df[cbind(1:nrow(df), x+1)]
[1] 0.1378446 0.2396694 0.3646209 0.3934426 0.2844828
添加1。
strata[cbind(1:nrow(strata), istrata$Agegrp + 1L)]
修改强>
使用新名称:
CGRect