R按数据框中的条件选择和修改列

时间:2018-01-18 00:46:07

标签: r dataframe

我有一个大的数据框架,利率结构如下

a <- "a"
b <- 2015
c <- as.vector(c(-0.3, -0.1, 0.2, 0.3, 0.5))

df <- data.frame(a,b,t(c))
colnames(df) <- c("Type", "Year", "X1", "X2", "X3", "X4", "X5")

现在我只想在列X1 - X5中从利率中得到减去1,只有当数字是&gt; 0

我试过

df[1,df[3:7]>0] <- df[1,df[3:7]>0] - 1 

导致

 X1   X2   X3
-1.3 -1.1 -0.8

我也看到了,

df[3:7]>0

结果:

X1    X2   X3   X4   X5
FALSE FALSE TRUE TRUE TRUE

我看到条件获得的列是(3,4,5),而我需要(5,6,7)。

此外,是否有一种简单的方法来复制行,以便有原始行和修改过的行?

我正在与R合作,因为有些日子,我真的很感激任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用dplyr包中的mutate_atifelse

    library(tidyverse)
    df %>% mutate_at(.vars = vars(X1:X5), 
                     .funs = funs(ifelse(. > 0, . - 1, .)))

      Type Year   X1   X2   X3   X4   X5
    1    a 2015 -0.3 -0.1 -0.8 -0.7 -0.5                

编辑:更通用

    df %>% mutate_at(.vars = vars(starts_with("X")), 
                     .funs = funs(ifelse(. > 0, . - 1, .)))

    df %>% mutate_at(.vars = vars(contains("X")), 
                     .funs = funs(ifelse(. > 0, . - 1, .)))