首页 > 解决方案 > 运行数据框然后将乘数应用于 R 中的某些行

问题描述

我正在查看一个名为 combinepred 的数据框,如果该行包含某个值,则将乘数应用于同一行的某个列中的另一个值。

我认为最好的方法是通过一个 for 循环来运行数据帧,然后有一个 if 语句来检查该值是否存在,然后如果不做其他事情来在同一行中执行不同的列,则执行此操作。

例如:

数据框组合pred:

monday | Tuesday     | Wednesday | Thurday    | class
0.99   |  0.2643     |   0.234   |  0.22343   | Maths
0.32   |  0.2123     |   0.22    |  0.63      | Science
0.233  |  0.6423     |   0.24    |  0.73      | English

我认为代码将如下所示:

for(i in 1:nrow(combinedpred)) {
  if (conbinedpred[i] %in% 'class'){
     combinedpred[i,"Maths"] * 1.5
  } if (conbinedpred[i] %in% 'class') {
     combinedpred[i,"English"| "science"] * 1.9
  } if (conbinedpred[i] %in% 'class') {
    combinedpred[i,"history"] * 1.1
  }
}

结果:

由于第一列中有数学,因此将 1.5 乘数应用于星期一列,但仅在该行上。我刚刚通过上面的例子意识到有点错误。

标签: rfor-loopdataframe

解决方案


那是你要的吗。将整行与基于 的正确乘数相乘class

lookupTable <- c(Maths = 1.5, Science= 1.9, English= 1.9, History = 1.1)
df1$multipl <- lookupTable[df1$class]

df1[,1:4] <- df1[,1:4] * df1$multipl

df1 <-
structure(list(monday = c(0.99, 0.32, 0.233), Tuesday = c(0.2643, 
0.2123, 0.6423), Wednesday = c(0.234, 0.22, 0.24), Thurday = c(0.22343, 
0.63, 0.73), class = c("Maths", "Science", "English")), row.names = c(NA, 
-3L), class = "data.frame")

推荐阅读