【问题标题】:Replacing and swapping one value by another in R for specific rows在 R 中为特定行替换和交换一个值
【发布时间】:2021-04-18 02:44:08
【问题描述】:

在以下数据框中,如何将所有1 替换为2,将所有2 替换为1,并保持3 原样

mydf=structure(list(x1 = c(1L, 2L, 3L, 1L), x2 = c(2L, 1L, 2L, 3L), 
               x3 = c(1L, 2L, 2L, 1L), x4 = c(1L, 2L, 1L, 1L)), row.names = 5:8, class = "data.frame")
mydf

  x1 x2 x3 x4
5  1  2  1  1
6  2  1  2  2
7  3  2  2  1
8  1  3  1  1

感谢任何形式的帮助。

【问题讨论】:

    标签: r replace swap


    【解决方案1】:

    基础 R:

    mydf[] <- lapply(mydf, function(x) ifelse(x == 1, 2, ifelse(x == 2, 1, x)))
    

    dplyr

    library(dplyr)
    mydf %>%
      mutate(across(.fns = ~case_when(. == 2 ~ 1L,. == 1 ~ 2L, TRUE ~ .)))
    
    #  x1 x2 x3 x4
    #5  2  1  2  2
    #6  1  2  1  1
    #7  3  1  1  2
    #8  2  3  2  2
    

    【讨论】:

    • 如果我只想申请第 6 行和第 7 行,而其他保持不变呢?
    • 您的意思是数据中的第 2 行和第 3 行?你可以这样做:mydf[2:3, ] &lt;- lapply(mydf[2:3, ], function(x) ifelse(x == 1, 2, ifelse(x == 2, 1, x)))
    • 我刚刚知道,.cols = everything()across 中的默认参数。太好了。
    猜你喜欢
    • 2020-10-17
    • 2019-01-03
    • 2014-05-19
    • 2022-07-14
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多