【问题标题】:Reverse the values of a list of variables [duplicate]反转变量列表的值[重复]
【发布时间】:2020-07-12 02:33:26
【问题描述】:

我有一个 df,其中大约 50 个变量的字符值范围为 1、2、3、4

var
1
2
3
4

我如何“批量”更改反转它们的值以便我得到:

var
4
3
2
1

所以 4 变成 1,3 变成 2,等等......有点像对每个变量应用公式(var = 5-value),但对字符值。

如一长串变量(~50)所述。

【问题讨论】:

  • 您可以使用5 - as.numeric(df$var) 或者您只是想用rev 反转值?
  • 问题是如何处理大量变量

标签: r tidyverse


【解决方案1】:

你可以试试:

library(dplyr)
df %>% mutate(across(var1:var50, ~5 - as.numeric(.)))

OR 在基础 R 中:

cols <- paste0('var', 1:50)
df[cols] <- lapply(df[cols], function(x) 5 - as.numeric(x))

【讨论】:

    【解决方案2】:

    如果您只是从一个值中减去 data.frame,正如您在示例中指出的那样,您应该可以这样做:

    df[] <- 5 - data.matrix(df)
    

    这是一个例子:

    df <- data.frame(var1 = as.character(c(1, 2, 3, 4)), 
                     var2 = as.character(c(10, 20, 30, 40)), 
                     stringsAsFactors = FALSE)
    df[] <- 5 - data.matrix(df)
    str(df)
    #  'data.frame':   4 obs. of  2 variables:
    #  $ var1: num  4 3 2 1
    #  $ var2: num  -5 -15 -25 -35
    

    如果您只是颠倒行顺序,那么这样的事情应该可以工作:

    df[nrow(df):1, ]
    #   var1 var2
    # 4    4   40
    # 3    3   30
    # 2    2   20
    # 1    1   10
    

    【讨论】:

      【解决方案3】:

      你可以使用 tidyverse 的 mutate_at() 或 mutate_all()。

      【讨论】:

      • 问题是如何处理大量变量
      猜你喜欢
      • 2020-09-07
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 2022-08-04
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      相关资源
      最近更新 更多