функция для взвешивания значений в каждой ячейке столбца фрейма данных с различными правилами для каждого - PullRequest
1 голос
/ 04 октября 2019

У меня есть фрейм данных с прямыми пунктуациями, извлеченными из файла необработанных данных. Все вычтенные знаки препинания имеют разные шкалы, поэтому их нелегко сравнить, поскольку они имеют разные максимальные и минимальные значения. Я хотел бы взвесить знаки препинания в шкале от 0 до 5, поэтому в момент составления графика будет возможно сравнить их между собой. С помощью метода для обработки значений строки одним числом (например: df$num3 <- df$num2 - df$num1) все меры получат неожиданные значения, поскольку у каждого из них есть различное максимальное значение. Я на самом деле пытаюсь разделить каждый результат на максимально возможный (который на самом деле составляет 120, 45, 30), а затем умножить частное на 5.

Итак, вот кадр данных со значениями max и min междускобки:

              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

Заранее спасибоза любое руководство вы можете предоставить мне

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Кажется, что возможное решение, которое не очень хорошо и идеально автоматизировано, делается с использованием следующего кода:

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 чтобы сделать это более эффективно.

Еще раз спасибо

0 голосов
/ 04 октября 2019

Я не совсем уверен в вашем вопросе, но я думаю, что главное - преобразовать данные в строке в числовые данные. По этой причине я бы использовал следующее:

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

Оттуда вы можете использовать функцию mutate из dplyr tidyverse (как указано выше) для выполнения оставшихся вычислений.

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...