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

时间:2016-05-26 20:30:03

标签: r dplyr

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

我们假设我将λ main ["A","String","with","many","spaces."] 计算为GROWTH,现在我可以看到(SIZE_t+1 - SIZE_t)/SIZE_t有一些奇怪的值(例如1000),原因是值已损坏相应的GROWTH变量。现在,我想查找并替换SIZE的损坏值。

如果我输入:

SIZE

然后只有损坏的行存储在data <- mutate(filter(data, lead(GROWTH)==1000), SIZE = 2600) 中,而我的数据帧的其余部分都会丢失。

我想要做的是过滤&#34;数据&#34;在左侧到腐败值的相应行,然后改变不正确的变量(在右侧):

data

但这似乎不起作用。有没有办法使用dplyr处理这个?非常感谢提前

2 个答案:

答案 0 :(得分:2)

您可以使用ifelse语句和mutate功能。假设你有一个数据框,在第3行的SIZE中有一些损坏的值,导致第4行的GROWTH值很大,你想要在第3行替换SIZE,在这里有一些值0.3 (我选择与你的不同只是为了与我的价值观保持一致)。 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

数据

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))

答案 1 :(得分:0)

我们可以使用:=来快速分配(data.table)。转换&#39; data.frame&#39;到&#39; data.table&#39; (setDT(data)),在&#39; i&#39;中指定逻辑条件。并指定(:=)0.3到&#39; SIZE&#39;满足&#39; i&#39;条件。

library(data.table)
setDT(data)[shift(GROWTH, type="lead")>1000, SIZE := 0.3]
data
#           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