【问题标题】:Extract values from data frame using data frame of indexes - R使用索引的数据框从数据框中提取值 - R
【发布时间】:2016-11-19 12:13:05
【问题描述】:

我有一个有用信息的数据框:

X = c(1,2,3,4,5,6,7,8,9,10)
Y = c(5,4,3,2,1,0,1,2,3,4)
Z = c(11,12,13,14,15,16,17,18,19,20)

df <- data.frame(X, Y, Z)

还有一个行列位置的数据框:

row <- c(6,2,5)
column <- c(1,2,3)


pos <- data.frame(row, column)

我想使用一些函数 (fun),它使用 pos 中的列和行位置来返回占据这些位置的 df 中的值,例如

fun(df, pos$row, pos$column)
[1] 6 4 15

我以为我可以这样做,但无济于事

df[c(pos$row),c(pos$col)]

【问题讨论】:

    标签: r data-manipulation


    【解决方案1】:

    行/列索引用作matrix,因此我们将“pos”转换为matrix,并将其用作提取值的行/列索引。

    df[as.matrix(pos)]
    

    否则,cbind 'pos' 的列作为cbindvectors 返回matrix

    df[cbind(pos$row, pos$column)]
    

    这可以转化为函数

    fExtract <- function(dat, indexDat){
                     dat[as.matrix(indexDat)]
                }
    fExtract(df, pos)
    #[1]  6  4 15
    

    【讨论】:

      【解决方案2】:

      您也可以通过调用sapply 中的函数来执行此操作,沿着pos 的行向下工作:

      sapply(seq(nrow(pos)), function(i) df[pos$row[i], pos$column[i]])
      [1]  6  4 15
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-21
        • 2023-03-12
        • 2016-06-07
        • 1970-01-01
        • 2020-02-29
        • 2019-09-10
        • 1970-01-01
        相关资源
        最近更新 更多