合并两列中的第 n 个元素,同时保持 R 中的原始行顺序

Merge nth elements from two columns while keeping the original row order in R

我正在尝试合并 col1 中的第 n 个元素,将 col2 中同一行的值替换到新列中:col3

df <- data.frame(col1 = c('A', 'B', 'D', 'F', 'C'), col2 = c(2, 1, 2, 3, 1))

> df
  col1 col2
1    A    2
2    B    1
3    D    2
4    F    3
5    C    1

例如,如果我要将 col1 中的每个奇数元素与 col2 中的每个偶数元素合并,输出应如下所示:

> df
  col1 col2 col3
1    A    2    A
2    B    1    1
3    D    2    D
4    F    3    3
5    C    1    C

谢谢。

我们可以使用 ifelse 语句检查行是偶数还是奇数,并使用模运算符 %%:

library(dplyr)
df %>% 
  mutate(col3 = ifelse((row_number() %% 2) == 0, col2, col1))
  col1 col2 col3
1    A    2    A
2    B    1    1
3    D    2    D
4    F    3    3
5    C    1    C

base R中,我们也可以使用row/column索引

df$col3 <- df[cbind(seq_len(nrow(df)), rep(1:2, length.out = nrow(df)))]

-输出

> df
  col1 col2 col3
1    A    2    A
2    B    1    1
3    D    2    D
4    F    3    3
5    C    1    C

基础

df <- data.frame(col1 = c('A', 'B', 'D', 'F', 'C'), col2 = c(2, 1, 2, 3, 1))

df$col3 <- df$col1
df$col3[c(FALSE, TRUE)] <- df$col2[c(FALSE, TRUE)]

df
#>   col1 col2 col3
#> 1    A    2    A
#> 2    B    1    1
#> 3    D    2    D
#> 4    F    3    3
#> 5    C    1    C

reprex package (v2.0.1)

创建于 2022-03-06