【问题标题】:How do I divide rows by the row sum and rows that meet a certain condition (row Sum >100)in matrix?r如何将行除以行总和以及矩阵中满足特定条件(行总和> 100)的行?
【发布时间】:2015-09-30 13:09:50
【问题描述】:

我有一个矩阵,我试图在末尾添加一列,其中包含行总和,然后将行除以行总和,条件是行总和大于 100。这就是我所拥有的远:

row.sums <- rowSums(a)
a <- cbind(a, row.sums)

这给了我我想要的初始矩阵,最后一列是行总和。以下代码是我为第二步尝试的:

a[(a[,dim(a)]>100)] <- dtm/row.sums

这给了我一个错误,说我要替换的向量的大小与我要替换的向量不匹配。我在这里做错了什么?抱歉,如果这是一个非常基本的问题,我对 R/ 编码很陌生。

【问题讨论】:

  • 您会收到错误,因为row.sums 包含所有行的总和,但您试图仅将它们分配给矩阵的较小子集。所以在创建row.sums时也要过滤
  • 您好,如果对您有用,请考虑接受该解决方案。您还可以阅读更多关于它的信息here

标签: r matrix rowsum


【解决方案1】:

这可能有点冗长的解决方案,但它的工作原理。

df <- cbind(df, rowSums(df))
a <- df[, dim(df)[2]]

for(i in 1:length(a))
{
  if(a[i] > 100)
  {
   df[i, ] <- df[i, ]/a
   }  
 }


#> df
#        [,1]  [,2]      [,3]  [,4]      [,5]  [,6]     [,7]
# x 0.03333333 0.050 0.1000000 0.100 0.1666667 0.375 1.000000
# y 0.06666667 0.075 0.1333333 0.125 0.2000000 0.500 1.333333

数据

x <- c(100,200,300,400,500)
y <- c(200,300,400, 500, 600)
df <- rbind(x, y)

【讨论】:

  • 谢谢!我选择了第一个答案,因为它有点短,但这也有效!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多