是否可以将数据框限制为特定行,然后更改其中一列中的某些值?
我们假设我将λ 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处理这个?非常感谢提前
答案 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