我有一个大的数据框架,利率结构如下
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合作,因为有些日子,我真的很感激任何帮助。谢谢!
答案 0 :(得分:1)
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, .)))