我有以下資料框df:
a<-c("Red","Red","Green","Red")
b<-c(1,1,1,1)
df<-data.frame(a,b)
當 a 的行是紅色時,我想 1 到 b,當它是綠色時,我想 -1。這樣做的最佳方法是什么?
uj5u.com熱心網友回復:
這可以通過邏輯向量本身來完成
df$b <- with(df, b (a == "Red") - (a == 'Green'))
-輸出
> df
a b
1 Red 2
2 Red 2
3 Green 0
4 Red 2
或者如果“a”列中只有兩個唯一值,請使用ifelse
df$b <- with(df, ifelse(a == 'Red', b 1, b - 1))
資料
df <- data.frame(a, b)
uj5u.com熱心網友回復:
library(tidyverse)
df <- tibble(
a = c("Red","Red","Green","Red"),
b = c(1,1,1,1)
)
df %>%
mutate(b = case_when(a == "Red" ~ b 1,
a == "Green" ~ b - 1,
TRUE ~ b))
#> # A tibble: 4 x 2
#> a b
#> <chr> <dbl>
#> 1 Red 2
#> 2 Red 2
#> 3 Green 0
#> 4 Red 2
由reprex 包創建于 2022-07-03 (v2.0.1)
uj5u.com熱心網友回復:
這是一個data.table選項:
library(data.table)
setDT(df)[, b := fcase(a == "Red", b 1,
a == "Green", b - 1, rep_len(TRUE, length(b)), b)]
輸出
a b
1: Red 2
2: Red 2
3: Green 0
4: Red 2
資料
df <- structure(list(a = c("Red", "Red", "Green", "Red"), b = c(1,
1, 1, 1)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-4L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/498162.html
標籤:r
下一篇:添加作為其他列總和的列
