对数据帧中的所有变量执行相同的变异

时间:2018-10-30 15:55:57

标签: r dplyr

我有一个28变量的数据帧,并且我想用相同的功能对同一数据帧中的每个变量进行突变。例如,为数据框中的每个变量添加一个额外的列,其中新列是变量的日志。例如,如果我有

dataframe <- data.frame(X=data1, Y=data2, Z=data3)

我想要一个包含X Y和Z以及log(X),log(Y)和log(Z)的新数据框。这很容易使用

mutate(dataframe, log(X)); mutate(dataframe(log(Y))

等,但是对于28个变量(以及每个变量的多次转换-我也想获得sqrt和^ 2)来说有点太多了。我知道mutate_all的存在,但是出于某种原因,当我尝试使用mutate_all时,它会替换所有变量,而不是添加新变量。

2 个答案:

答案 0 :(得分:4)

我们可以使用mutate_all并在funs中指定后缀,以便将其创建为新列。否则,将原始内容替换为函数的输出

dataframe %>%
        mutate_all(funs(log = log(.))

答案 1 :(得分:1)

base R选项为

df <- head(iris[1:2])
df[paste("log", names(df), sep = "_")] <- log(df)
df
#  Sepal.Length Sepal.Width log_Sepal.Length log_Sepal.Width
#1          5.1         3.5         1.629241        1.252763
#2          4.9         3.0         1.589235        1.098612
#3          4.7         3.2         1.547563        1.163151
#4          4.6         3.1         1.526056        1.131402
#5          5.0         3.6         1.609438        1.280934
#6          5.4         3.9         1.686399        1.360977