我有一個大資料框(400,000 行)。我正在嘗試根據條件創建一個新列。在評估條件之前進行分組是必要的Gene,Group但是應該為每一行獨立生成新列(如果滿足條件)。
條件:兩個或多個 Gene-Group 的Counts值必須 >=10。例如,Gene1-GroupB 沒有通過這個條件,而 Gene2-GroupB 和 Gene3-GroupB 都通過了。我一直無法弄清楚如何編碼這種情況。
(NascentCountsCPM / TotalCountsCPM)如果基因組通過條件,我想為每一行創建一個值為 的新列。如果不滿足條件,我想回傳 NA 值。我相信可以使用 dplyrmutate()和dplyr 的組合case_when(),但我根本無法理解如何對所描述的條件進行編碼。
謝謝你的幫助!
#Starting DataFrame
df>
| Gene | Group | Sample | Counts | TotalCountsCPM | NascentCountsCPM |
|-------|-------|----------|--------|----------------|-----------------|
| Gene1 | B | SampleB1 | 7 | 1.36 | 0 |
| Gene2 | B | SampleB1 | 269 | 52.29 | 2.92 |
| Gene3 | B | SampleB1 | 25 | 4.86 | 0.19 |
| Gene1 | B | SampleB2 | 2 | 0.49 | 0 |
| Gene2 | B | SampleB2 | 212 | 52.45 | 0.99 |
| Gene3 | B | SampleB2 | 16 | 3.96 | 0 |
| Gene1 | B | SampleB3 | 3 | 0.64 | 0 |
| Gene2 | B | SampleB3 | 219 | 46.58 | 1.7 |
| Gene3 | B | SampleB3 | 41 | 8.72 | 0.21 |
df_new <- df %>%
group_by(Gene, Group) %>%
mutate(CountsRatio = case_when((CONDITION) ~ (NascentCountsCPM / TotalCountsCPM),
TRUE ~ NA_real_)
>df_new
| Gene | Group | Sample | Counts | TotalCountsCPM | NascentCountsCPM | CountsRatio |
|-------|-------|----------|--------|----------------|------------------|-------------|
| Gene1 | B | SampleB1 | 7 | 1.36 | 0 | NA |
| Gene2 | B | SampleB1 | 269 | 52.29 | 2.92 | 0.056 |
| Gene3 | B | SampleB1 | 25 | 4.86 | 0.19 | 0.4 |
| Gene1 | B | SampleB2 | 2 | 0.49 | 0 | NA |
| Gene2 | B | SampleB2 | 212 | 52.45 | 0.99 | 0.019 |
| Gene3 | B | SampleB2 | 16 | 3.96 | 0 | 0 |
| Gene1 | B | SampleB3 | 3 | 0.64 | 0 | NA |
| Gene2 | B | SampleB3 | 219 | 46.58 | 1.7 | 0.056 |
| Gene3 | B | SampleB3 | 41 | 8.72 | 0.21 | 0.024 |
df <- data.frame(
stringsAsFactors = FALSE,
Gene = c("Gene1","Gene2","Gene3",
"Gene1","Gene2","Gene3","Gene1","Gene2","Gene3"),
Group = c("B", "B", "B", "B", "B", "B", "B", "B", "B"),
Sample = c("SampleB1","SampleB1",
"SampleB1","SampleB2","SampleB2","SampleB2","SampleB3",
"SampleB3","SampleB3"),
Counts = c(7L, 269L, 25L, 2L, 212L, 16L, 3L, 219L, 41L),
TotalCountsCPM = c(1.36, 52.29, 4.86, 0.49, 52.45, 3.96, 0.64, 46.58, 8.72),
NascentCountsCPM = c(0, 2.92, 0.19, 0, 0.99, 0, 0, 1.7, 0.21)
)
uj5u.com熱心網友回復:
df %>%
add_count(Gene, Group, wt = Counts > 10) %>%
mutate(CountsRatio = if_else(n >= 2, NascentCountsCPM/TotalCountsCPM, NA_real_))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/522753.html
標籤:rdplyr条件语句
上一篇:從每兩列中獲取不同觀察值的頻率
