分享
三行代码  ›  专栏  ›  技术社区  ›  LD-DS-00

如何切换列中的值?

r
  •  2
  • LD-DS-00  · 技术社区  · 2 天前

    我有以下专栏:

    ColA ColB
    1     f
    2     f
    1     f
    1     f
    2     f
    

    我怎么把可乐里的1换成2,2换成1?

    2 回复  |  直到 2 天前
        1
  •  3
  •   akrun    2 天前

    如果只有1和2个值,我们可以利用算术来改变这些值

    df1$ColA <- with(df1,  2- ColA + 1)
    df1$ColA
    #[1] 2 1 2 2 1
    

    或使用 match

    match(df1$ColA, c(2, 1))
    

    或使用 factor

    factor(df1$ColA, levels = 1:2, labels = 2:1)
    

    数据

    df1 <- structure(list(ColA = c(1L, 2L, 1L, 1L, 2L), ColB = c("f", "f", 
    "f", "f", "f")), class = "data.frame", row.names = c(NA, -5L))
    
        2
  •  0
  •   iamericfletcher    2 天前

    这是另一种解决此问题的方法 transform base r ifelse

    # Data: (h/t @akrun)
    
    df1 <- structure(list(ColA = c(1L, 2L, 1L, 1L, 2L), ColB = c("f", "f", 
    "f", "f", "f")), class = "data.frame", row.names = c(NA, -5L))
    
    # Code:
    
    transform(df1, ColA = ifelse(ColA == 1, 2, 1))
    
    # Output:
    
    #>   ColA ColB
    #> 1    2    f
    #> 2    1    f
    #> 3    2    f
    #> 4    2    f
    #> 5    1    f
    

    创建于2020-11-21 reprex package (0.3.0版)