在 R 資料框中,我想將數字變數更改為相反的數字(乘以 -1 ),其中類別等于“a”或“b”。目前,代碼有點長,還有其他方法嗎?謝謝!
test_data <- data.frame(category=c("a","b","x","a","b","c","d"),
amount_local=c(10,30,52,5,67,5,20),
amount_usd=c(1,3,5,7,8,3,4))
test_data$amount_local[test_data$category %in% c('a','b') ] <- test_data$amount_local[test_data$category %in% c('a','b') ]*-1
test_data$amount_usd[test_data$category %in% c('a','b') ] <- test_data$amount_usd[test_data$category %in% c('a','b') ]*-1
uj5u.com熱心網友回復:
這是否有效:
library(dplyr)
test_data %>% mutate(across(starts_with('amount'), ~ ifelse(category %in% c('a','b'), . * -1, .)))
category amount_local amount_usd
1 a -10 -1
2 b -30 -3
3 x 52 5
4 a -5 -7
5 b -67 -8
6 c 5 3
7 d 20 4
uj5u.com熱心網友回復:
您可以將多個列相乘。為避免重復條件,您可以將其保存在變數中。
inds <- test_data$category %in% c('a','b')
test_data[inds, -1] <- test_data[inds, -1] * -1
# category amount_local amount_usd
#1 a -10 -1
#2 b -30 -3
#3 x 52 5
#4 a -5 -7
#5 b -67 -8
#6 c 5 3
#7 d 20 4
uj5u.com熱心網友回復:
如果條件相同,您可以一次選擇多個列。
test_data[test_data$category %in% c('a','b'), c('amount_local', 'amount_usd')] <- test_data[test_data$category %in% c('a','b'), c('amount_local', 'amount_usd')] * -1
還有很多dplyr解決方案,如果您稍微閱讀一下,應該很清楚。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/326967.html
上一篇:如何在R中制作非數字列的直方圖?
