Умножьте определенные значения в кадре данных - PullRequest
0 голосов
/ 20 июня 2019

У меня есть фрейм данных, и я хотел бы умножить определенные значения в одном столбце на минус 1.

Я могу отфильтровать свой набор данных, умножить нужный мне столбец на -1, а затем присоединить данные обратно к исходному фрейму данных, но это выглядит нелепо нелегко. Мне интересно, есть ли лучшее решение, которое я пропускаю?

Это мой фрейм данных:

input = structure(list(V1 = c("Sales", "Sales", "Sales", "Sales", "Sales", 
"Sales", "Sales", "Sales", "Sales", "Sales", "Sales", "Sales", 
"Sales", "Sales", "Sales", "Sales", "Sales", "Sales", "Sales", 
"Sales"), V2 = c("Frank", "John", "Bill", "Bob", "Toby", "Sam", 
"Michael", "Nicole", "Dimitri", "Gene", "Keiran", "Dave", "Lucy", 
"Claire", "Sarah", "Virginia", "Bob", "Nicole", "John", "Frank"
), V3 = c("Australia", "Australia", "Australia", "Australia", 
"NZ", "NZ", "NZ", "NZ", "Germany", "Germany", "Germany", "Germany", 
"India", "India", "India", "India", "USA", "USA", "USA", "USA"
), V4 = c(218L, 140L, 374L, 146L, 317L, 232L, 60L, 177L, 50L, 
292L, 255L, 17L, 193L, 364L, 77L, 27L, 330L, 337L, 298L, 361L
)), class = "data.frame", row.names = c(NA, -20L))

И это строки V2, в которых я хотел бы умножить значение столбца V4 на «-1»

inverse = c("Frank", "John", "Toby", "Sam", "Lucy", "Claire")

Это вывод, который я получаю, если отфильтрую по V2, а затем присоединюсь к новым результатам:

structure(list(V1 = c("Sales", "Sales", "Sales", "Sales", "Sales", 
"Sales", "Sales", "Sales", "Sales", "Sales", "Sales", "Sales", 
"Sales", "Sales", "Sales", "Sales", "Sales", "Sales", "Sales", 
"Sales"), V2 = c("Frank", "John", "Bill", "Bob", "Toby", "Sam", 
"Michael", "Nicole", "Dimitri", "Gene", "Keiran", "Dave", "Lucy", 
"Claire", "Sarah", "Virginia", "Bob", "Nicole", "John", "Frank"
), V3 = c("Australia", "Australia", "Australia", "Australia", 
"NZ", "NZ", "NZ", "NZ", "Germany", "Germany", "Germany", "Germany", 
"India", "India", "India", "India", "USA", "USA", "USA", "USA"
), V4 = c(-218L, -140L, 374L, 146L, -317L, -232L, 60L, 177L, 
50L, 292L, 255L, 17L, -193L, -364L, 77L, 27L, 330L, 337L, -298L, 
-361L)), class = "data.frame", row.names = c(NA, -20L))

Мне любопытно, есть ли лучшая функция, которую я мог бы использовать для достижения тех же результатов?

1 Ответ

1 голос
/ 20 июня 2019

Попробуйте изменить в сочетании с if_else

library(tidyverse)
inverse = c("Frank", "John", "Toby", "Sam", "Lucy", "Claire")
input %>% 
  mutate(V4 = if_else(V2 %in% inverse,-V4, V4 ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...