肯定有人问过类似的问题,但我的问题要简单得多,不幸的是,我真的无法从他们那里剖析答案,所以这是我的具体情况,可能是简单的情况:
df <- data.frame("Sample" = 1:30,
"Individual" = c("a", "b", "c"),
"Repeat" = 1:3)
我想将 Individual == "a"的条目突变为 "a_(number_of_repeat)。但仅适用于 a,不适用于 b 或 c。
我试过:
df[df$Individual == "a", ] <-
df %>% filter(Individual == "a") %>%
df %>% mutate(Individual = paste0(Individual,"_",Repeat))
但没有成功。也许它也可以通过 if/else 或 for argument 来解决?
df$Individual <- for (df$Individual == "a") {
df %>% mutate(Individual = paste0(Individual,"_",Repeat))
}
...也是一个失败。
最佳答案
像这样的东西,用 mutate
和经典的 ifelse
怎么样:
library(dplyr)
df %>% mutate(Individual = ifelse(Individual=="a",
paste0(Individual,'_',Repeat),
Individual))
Sample Individual Repeat
1 1 a_1 1
2 2 2 2
3 3 3 3
4 4 a_1 1
5 5 2 2
6 6 3 3
7 7 a_1 1
8 8 2 2
9 9 3 3
10 10 a_1 1
11 11 2 2
12 12 3 3
13 13 a_1 1
14 14 2 2
15 15 3 3
16 16 a_1 1
17 17 2 2
18 18 3 3
19 19 a_1 1
20 20 2 2
21 21 3 3
22 22 a_1 1
23 23 2 2
24 24 3 3
25 25 a_1 1
26 26 2 2
27 27 3 3
28 28 a_1 1
29 29 2 2
30 30 3 3
或者在新的专栏中:
df %>% mutate(Individual_2 = ifelse(Individual=="a",
paste0(Individual,'_',Repeat),
Individual))
关于r - 如何改变过滤后的行(使用 dplyr 或 if/else),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52720655/