我有以下数据框:
df <- structure(list(sqn = c("FOO", "BAR"), start = c(1, 99), end = c(531,
1), strand = c("+", "-")), row.names = c(NA, -2L), class = c("tbl_df",
"tbl", "data.frame"))
Run Code Online (Sandbox Code Playgroud)
看起来像:
# A tibble: 2 x 4
sqn start end strand
<chr> <dbl> <dbl> <chr>
1 FOO 1 531 +
2 BAR 99 1 -
Run Code Online (Sandbox Code Playgroud)
我想做的是交换if start和endcolumn中的值strand == "-"。期望的结果是这样的:
# A tibble: 2 x 4
sqn start end strand
<chr> <dbl> <dbl> <chr>
1 FOO 1 531 +
2 BAR 1 99 -
Run Code Online (Sandbox Code Playgroud)
我该如何实现?
一个选择是
df %>%
mutate(start1 = ifelse(strand == "-", end, start),
end = ifelse(strand =="-", start, end)) %>%
select(sqn, start = start1, end, strand)
Run Code Online (Sandbox Code Playgroud)
或更简单的选择是
i1 <- df$strand == "-"
df[i1, c("start", "end")] <- df[i1, c("end", "start")]
Run Code Online (Sandbox Code Playgroud)