【发布时间】:2018-11-13 13:50:30
【问题描述】:
我有一个数据框,其中包含评分为 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")])
【问题讨论】:
标签: r