Round() 还不够

标签 r

  Class_1 Class_2 Class_3 Class_4 Class_5 Class_6 Class_7 Class_8 Class_9
    0.002   0.326   0.224   0.402   0.004   0.006   0.030   0.002   0.004
    0.012   0.026   0.022   0.004   0.010   0.600   0.024   0.278   0.024
    0.000   0.000   0.000   0.000   0.000   0.994   0.000   0.004   0.002
    0.008   0.528   0.300   0.078   0.000   0.002   0.008   0.014   0.062
    0.142   0.004   0.002   0.000   0.002   0.044   0.010   0.320   0.476
    0.000   0.086   0.914   0.000   0.000   0.000   0.000   0.000   0.000

你好。上面的 df 是我正在使用的。我想对每一行进行四舍五入,以便每一行在具有最大小数的类下恰好有一个“1”。如果所有值都低于 0.5,则使用 round() 函数会使所有行条目都为 0;例如,使用 round() 时第一行全为 0,因为所有行都使用 round() 向下舍入。看来我必须使用 if 语句。

> dput(head(demo56.pred))
structure(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), .Dim = c(6L, 
9L), .Dimnames = list(c("1", "2", "3", "4", "5", "6"), c("Class_1", 
"Class_2", "Class_3", "Class_4", "Class_5", "Class_6", "Class_7", 
"Class_8", "Class_9")))

提前致谢。

最佳答案

这可以通过 apply 来完成,它将函数应用于数据框或矩阵的每一行。

t(apply(yourdata, 1, function(r) as.numeric(r == max(r))))

其工作原理是:

  • r == max(r)将创建一个逻辑向量( TRUEFALSE ),关于 r 中的每个值是否是最高的。
  • as.numeric(r == max(r))变成TRUEFALSE值分别为 1 和 0。
  • apply(yourdata, 1, function(r) as.numeric(r == max(r)))将此函数应用于数据框或矩阵的每一行。 1告诉apply将其应用于行( 2 会将其应用于列)。
  • 最后,apply为原始数据中的每一行返回一列。您想将其转置回来,这就是它被包裹在 t 中的原因.

关于Round() 还不够,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29724358/

相关文章:

r - 将Windows版本的R连接到Hadoop

r - 在绘图区域内放置仅 x 轴的刻度标签

r - 离线 ggplot2 文档?

r - 将 dplyr SE 与 ggplot2 一起使用

r - R 函数的多个相似输入 - 使用列表提供它们的问题

r - 创建一个列,该列采用另一列的第一个值,后续值是前一个值的缩放比例

R shiny plotly 宽度和高度不更新

c++ - 如何使用 boolean 数组或 LogicalVector Rcpp::List getPIcvalue() 和 RcppExport SEXP mypackage5_getPIcvalue()

r - 在 r 中使用跨组聚合的加权平均值

r - 根据分类变量过滤 plotly 折线图