我有一个从原始数据文件中提取的带有直接标点符号的数据框。所有扣除的标点符号都有不同的标度,因此比较起来并不容易,因为它们的最大值和最小值不同。我想将标点符号权衡为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
谢谢您能为我提供的任何指导
似乎使用下面的代码完成了一种不太理想且完全自动化的解决方案。
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)
我想知道是否有一种方法可以将for
与if else
结合使用以更有效地做到这一点。
再次感谢您
我不确定您的问题,但我认为要点是将字符串中的数据转换为数字数据。因此,我将使用以下内容。
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
功能(如上所述)进行剩余的计算。
希望对您有帮助。