将数据框中的特定值相乘

时间:2019-06-19 21:29:40

标签: r

我有一个数据框,我想将一列中的特定值乘以负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 个答案:

答案 0 :(得分:1)

尝试与if_else结合使用mutate

library(tidyverse)
inverse = c("Frank", "John", "Toby", "Sam", "Lucy", "Claire")
input %>% 
  mutate(V4 = if_else(V2 %in% inverse,-V4, V4 ))