使用 dplyr 更改特定行中数据框中的值

Flo*_*yan 6 r dplyr

是否可以将数据框限制为特定行,然后更改其中一列中的某些值?

假设我计算GROWTH(SIZE_t+1 - SIZE_t)/SIZE_t,现在我可以看到GROWTH(例如 1000)有一些奇怪的值,原因是相应SIZE变量的损坏值。现在我想找到并替换SIZE.

如果我输入:

data <- mutate(filter(data, lead(GROWTH)==1000), SIZE = 2600)
Run Code Online (Sandbox Code Playgroud)

然后只存储损坏的行,data而我的数据帧的其余部分丢失。

我想做的是将左侧的“数据”过滤到损坏值的相应行,然后改变不正确的变量(在右侧):

filter(data, lead(GROWTH)==1000)  <- mutate(filter(data, lead(GROWTH)==1000), SIZE = 2600) 
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用。有没有办法使用 dplyr 处理这个问题?提前谢谢了

Psi*_*dom 9

您可以使用ifelse带有mutate函数的语句。假设您有一个数据框,在第 3 行的 SIZE 中有一些损坏的值,这导致第 4 行的 GROWTH 值很大,并且您想用0.3此处的某些值替换第 3 行的 SIZE (我选择与您的不同与我的价值观一致)。所述GROWTH > 1000条件可以相应地替换。

data
          SIZE       GROWTH
1  -1.49578498           NA
2  -0.38731784   -0.7410605
3   0.00010000   -1.0002582
4   0.53842217 5383.2216758
5  -0.65813674   -2.2223433
6   0.29830698   -1.4532599
7   0.04712019   -0.8420413
8  -0.07312482   -2.5518788
9   1.64310713  -23.4698959
10  1.44927727   -0.1179654

library(dplyr)
data %>% mutate(SIZE = ifelse(lead(GROWTH > 1000, default = F), 0.3, SIZE))
          SIZE       GROWTH
1  -1.49578498           NA
2  -0.38731784   -0.7410605
3   0.30000000   -1.0002582
4   0.53842217 5383.2216758
5  -0.65813674   -2.2223433
6   0.29830698   -1.4532599
7   0.04712019   -0.8420413
8  -0.07312482   -2.5518788
9   1.64310713  -23.4698959
10  1.44927727   -0.1179654
Run Code Online (Sandbox Code Playgroud)

数据

structure(list(SIZE = c(-1.49578498093657, -0.387317841955887, 
1e-04, 0.538422167582116, -0.658136741561064, 0.298306980856383, 
0.0471201873908915, -0.0731248216938637, 1.64310713116132, 1.44927727104653
), GROWTH = c(NA, -0.741060482026387, -1.00025818588551, 5383.22167582116, 
-2.22234332311492, -1.45325988053609, -0.842041284935343, -2.55187883883499, 
-23.4698958999199, -0.117965442690154)), class = "data.frame", .Names = c("SIZE", 
"GROWTH"), row.names = c(NA, -10L))
Run Code Online (Sandbox Code Playgroud)