我有一个数据框,其中包含从原始数据文件中提取的直接标点符号。所有扣除的标点符号都有不同的比例,因此不容易比较它们,因为它们具有不同的最大值和最小值。我想将标点符号称重为 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)
我想知道是否有办法使用带有if else
的for
来更有效地执行此操作。
再次感谢
我不完全确定你的问题,但我认为重点是将字符串中的数据转换为数字数据。出于这个原因,我会使用以下方法。
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
从那里,您可以使用 tidyversedplyr
中的mutate
函数(如上所述(进行剩余的计算。
我希望这对你有所帮助。