返回行

时间:2018-11-13 13:50:30

标签: r

我有一个数据框,其中包含条件评估,评分范围为1-7(作为列名)。每个观察结果包含每个条件等级(1-7)的代表区域(百分比)。每次观察的每一行总和应为100%。

我能够返回最高覆盖率的相应条件等级(列名称为1-7),以显示大部分区域是条件x。

这是我执行此操作的代码:

# Create some data:
    set.seed(10)
    df <- matrix(round(rbeta(100*7,1,1),digits=1), nc=7)
    df <- round(sweep(df, 1, rowSums(df), FUN="/"),digits=1)
    colnames(df)<-c(1:7) # Change the column names to reflect condition value
    df <- as.data.frame(df)

# Now return the condition corresponding to the highest % coverage 
    df$maxPercCond <- as.numeric(colnames(df)[max.col(df,ties.method="last")])
    df[df == 0] <- NA # Need to keep this as actual data contains NA values

我的问题

我需要返回每一行的峰值条件(pkVal)。

    df[c(5,70),]

     1   2   3   4   5   6   7      maxPercCond pkVal  | pkVal(REQUIRED)
  5  0.1 0.2 0.2 0.1 0.2 0.1  NA    5           0.1    | 6
  70 0.2 0.2 0.1 0.2 0.1 NA   0.1   4           0.1    | 7

在上面的示例中,pkVal应该分别等于6和7(根据我的手册pkVal(REQUIRED)条目,以显示6是第一行的最高额定条件,而7是第二行的最高额定条件

我一直在尝试对maxPerCond作业进行修改,但被打成一片!任何建议/协助都将受到欢迎:

 df$pkVal <- as.numeric(colnames(df)[max.col(df[cbind( 1:nrow(df),
 max.col(!is.na(df[,1:7]),"last") )],ties.method="last")])

1 个答案:

答案 0 :(得分:2)

一种选择可能是在行模式下使用apply并找到对应的最后一个元素的列名,该元素的 not 不等于NA

apply(df, 1, function(x) { tail(names(x)[!is.na(x)], n=1) })