我有一个数据框,其中包含条件评估,评分范围为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")])
答案 0 :(得分:2)
一种选择可能是在行模式下使用apply
并找到对应的最后一个元素的列名,该元素的 not 不等于NA
:
apply(df, 1, function(x) { tail(names(x)[!is.na(x)], n=1) })