aaa*_*aaa 8 replace r rows conditional-statements dataframe
这是我的数据帧的一个例子:
df = read.table(text = 'a b
120 5
120 5
120 5
119 0
118 0
88 3
88 3
87 0
10 3
10 3
10 3
7 4
6 0
5 0
4 0', header = TRUE)
Run Code Online (Sandbox Code Playgroud)
我需要将col中的0替换为b前面不同于0的数字.
这是我想要的输出:
a b
120 5
120 5
120 5
119 5
118 5
88 3
88 3
87 3
10 3
10 3
10 3
7 4
6 4
5 4
4 4
Run Code Online (Sandbox Code Playgroud)
到现在为止我试过:
df$b[df$b == 0] = (df$b == 0) - 1
Run Code Online (Sandbox Code Playgroud)
但它不起作用.谢谢
na.locf来自zoo可以帮助这个:
library(zoo)
#converting zeros to NA so that na.locf can get them
df$b[df$b == 0] <- NA
#using na.locf to replace NA with previous value
df$b <- na.locf(df$b)
Run Code Online (Sandbox Code Playgroud)
日期:
> df
a b
1 120 5
2 120 5
3 120 5
4 119 5
5 118 5
6 88 3
7 88 3
8 87 3
9 10 3
10 10 3
11 10 3
12 7 4
13 6 4
14 5 4
15 4 4
Run Code Online (Sandbox Code Playgroud)
在一个简单的条件下执行此任务似乎很难,但您也可以使用一个小的for循环而不是加载一个包.
for (i in which(df$b==0)) {
df$b[i] = df$b[i-1]
}
Run Code Online (Sandbox Code Playgroud)
输出:
> df
a b
1 120 5
2 120 5
3 120 5
4 119 5
5 118 5
6 88 3
7 88 3
8 87 3
9 10 3
10 10 3
11 10 3
12 7 4
13 6 4
14 5 4
15 4 4
Run Code Online (Sandbox Code Playgroud)
我认为对于大型data.frames来说这可能会很慢