【问题标题】:Extract values of different columns提取不同列的值
【发布时间】:2016-06-03 13:40:44
【问题描述】:

我想从不同的列中提取值,具体取决于列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

Dataframe 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 列(agegrp_1)估算数据帧 2 的值)。另一个例子,数据框 1 中的第 5 行位于 Agegrp 5 中,并且有 POSCODN 2661。所以这里应该查看数据框 2 中的第 3 行和第 4 列 (agegrp_3) 请参见下面的数据框示例(@987654331 的补充@):

      Geslacht     I_Agegrp 
1     0.4761905   0.34085213
2     0.4761905   0.13784461
3     0.5785124   0.34710744
4     0.5785124   0.34710744
5     0.5270758   0.15162455

有没有办法做到这一点?

非常感谢您的帮助!

【问题讨论】:

  • 可以使用二维矩阵作为索引df[cbind(seq_along(x), x+1L)]

标签: r extract


【解决方案1】:

来自?'['的帮助:

当用 [ 索引数组时,单个参数 i 可以是一个矩阵 许多列,因为有 x 的维度;结果是一个向量 元素对应于 i 的每一行中的索引集。

所以子集可以是一个矩阵。第 1 列将是行,第 2 列将代表列。

如果 x 是 x <- c(3,2,1,1,1),我们可以将它与行 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 上加1。

df[cbind(1:nrow(df), x+1)]
[1] 0.1378446 0.2396694 0.3646209 0.3934426 0.2844828

编辑

使用新名称:

strata[cbind(1:nrow(strata), istrata$Agegrp + 1L)]

【讨论】:

  • 谢谢,只是我还是有点失落。 df 是指数据帧 1 还是数据帧 2?而x+1 不起作用,因为数据框 2 中的列名不同。还是我错过了什么?
  • 是的 df 只是一个示例数据框名称。 x 用于带有3 2 1 1 1 的列。您没有提供任何数据框名称,因此我使用了默认名称。如果您希望我从字面上为您编写所有代码。给我两者的名称以及相关的列名。
  • 谢谢,因为我没有完全明白要改变什么。我用数据框和列名以及数据的前 5 行更新了我的帖子。
  • 你还没有添加输出。应该来自该示例的新向量是什么。
  • 我已经用所有信息编辑了帖子,希望这会更好
猜你喜欢
  • 2021-06-19
  • 2021-08-08
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
相关资源
最近更新 更多