用于对数据帧的列的每个单元中的值进行加权的函数,每个规则具有不同的规则

问题描述 投票:1回答:2

我有一个从原始数据文件中提取的带有直接标点符号的数据框。所有扣除的标点符号都有不同的标度,因此比较起来并不容易,因为它们的最大值和最小值不同。我想将标点符号权衡为0到5的标度,因此在绘制度量时,将它们之间进行比较是可行的。使用以单个数字操作行值的方法(例如:df$num3 <- df$num2 - df$num1),由于每个度量都有不同的最大值,因此所有度量都将获得意外值。我实际上是在尝试将每个结果除以最大可能值(实际上是120、45、30),然后将商乘以5。

所以这是数据框,括号中有最大值和最小值:

              Variable Puntuación
1 Capacidades (24-120)         85
2    Planeación (9-45)         30
3     Relaciones(6-30)         20

目标是编写一个函数,使我能够执行以下操作并将结果存储/更新在同一列中:

(row 1- column 2) /120 * 5 , (row 2- column 2) /45 * 5, (row 3- column 2) /30 * 5

谢谢您能为我提供的任何指导

r math data-manipulation operation weighted
2个回答
0
投票

似乎使用下面的代码完成了一种不太理想且完全自动化的解决方案。

tpg$Puntuación[1] <- (as.numeric(as.character(tpg[1,2]))/120*5)


tpg$Puntuación[2] <- (as.numeric(as.character(tpg[2,2]))/45*5)


tpg$Puntuación[2] <- (as.numeric(as.character(tpg[3,2]))/30*5)

我想知道是否有一种方法可以将forif else结合使用以更有效地做到这一点。

再次感谢您


0
投票

我不确定您的问题,但我认为要点是将字符串中的数据转换为数字数据。因此,我将使用以下内容。

library(tidyverse)
glimpse(data)

...给出:

Observations: 3
Variables: 2
$ Variable   <chr> "Capacidades (24-120)", "Planeación (9-45)", "Relaciones…
$ Puntuación <dbl> 85, 30, 20

然后:

data_new <- data %>% 
  separate(
    col = Variable, 
    into = c("ID", "Value"), 
    convert = F, 
    sep = "\\(") %>% 
  separate(
    col = Value, 
    into = c("Value1", "Value2"), 
    convert = F, 
    sep = "\\-") %>% 
  mutate(
    Value1 = as.integer(Value1),
    Value2 = as.integer(
      str_sub(
        Value2, start = 1L, end = -2L
        )
      )
    )

glimpse(data_new)

...给出:

Observations: 3
Variables: 4
$ ID         <chr> "Capacidades ", "Planeación ", "Relaciones"
$ Value1     <int> 24, 9, 6
$ Value2     <int> 120, 45, 30
$ Puntuación <dbl> 85, 30, 20

[从那里,您可以使用tidyverse的mutate中的dplyr功能(如上所述)进行剩余的计算。

希望对您有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.