假設我有以下 df
df <- read.table(text = "team id result result_number
A 1 999 999
A 2 cat 45
A 3 dog 50
B 4 999 999
B 5 three 60
B 6 four 30
C 7 999 999
C 8 rabbit 45
C 9 monkey 11
D 10 dog 12
D 11 999 999
D 12 basket 10", header = T)
對于在具有999的每一行result的類別,我想替換值(以及相應的result_number值)與所述值從隨機行內的同一個團隊(例如A,B,C,或d內的隨機),該不是999。
所以這是一個示例輸出:
df <- read.table(text = "team id result result_number
A 1 cat 45
A 2 cat 45
A 3 dog 50
B 4 four 30
B 5 three 60
B 6 four 30
C 7 rabbit 45
C 8 rabbit 45
C 9 monkey 11
D 10 dog 12
D 11 basket 10
D 12 basket 10", header = T)
如果沒有非常笨拙的外部函式,我無法在 dplyr 中找到一種優雅的方法
uj5u.com熱心網友回復:
按 'team' 分組,回圈across'result', 'result_number', columns, replace,其中值是 999,有一個sample不等于 ( !=) 到 999的元素,并回傳單個值
library(dplyr)
df %>%
group_by(team) %>%
mutate(across(result:result_number,
~ replace(., as.character(.)== "999",
sample(.[as.character(.) != "999"], 1)))) %>%
ungroup
-輸出
# A tibble: 12 × 4
team id result result_number
<chr> <int> <chr> <int>
1 A 1 dog 45
2 A 2 cat 45
3 A 3 dog 50
4 B 4 four 30
5 B 5 three 60
6 B 6 four 30
7 C 7 monkey 45
8 C 8 rabbit 45
9 C 9 monkey 11
10 D 10 dog 12
11 D 11 dog 10
12 D 12 basket 10
uj5u.com熱心網友回復:
這個結果是在 akrun 的幫助下創建的!非常感謝!
library(dplyr)
df %>%
group_by(team) %>%
mutate(across(contains("result"), ~ifelse(.==999, sample(.[. != 999], 1, replace = TRUE),.)))
team id result result_number
<chr> <int> <chr> <int>
1 A 1 cat 50
2 A 2 cat 45
3 A 3 dog 50
4 B 4 four 60
5 B 5 three 60
6 B 6 four 30
7 C 7 monkey 45
8 C 8 rabbit 45
9 C 9 monkey 11
10 D 10 dog 12
11 D 11 dog 12
12 D 12 basket 10
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/312492.html
上一篇:帶有排序值的geom_bar()
下一篇:根據條件向一列添加值
