我在R中有以下两个数据框
df=data.frame("Z_Frequency"=c(5,10,15,20,25), "Z_Slope2"=c(0,.7,
-0.5,0,.7))
df24<-data.frame("Z_Frequency"=seq(from=min(df$Z_Frequency), to =
max(df$Z_Frequency), by = 1))
我通过比较df24 $ Z_Frequency和df $ Z_Frequency的值来填充df24 $ Z_SSLOPE列的值。如果df24 $ Z_Frequency的值与df $ Z_Frequency的值相同,则将从df $ Z_Slope2复制df24 $ Z_SSLOPE列值。我为相同的代码编写了以下代码循环。
df24$Z_SSLOPE<-0
for( i in 1: nrow(df)){ for (j in 1:nrow(df24)) {
if(df24$Z_Frequency[j]==df$Z_Frequency[i]){ df24$Z_SSLOPE[j]<-
df$Z_Slope2[i]} else if(df24$Z_Frequency[j]>df$Z_Frequency[i]&
df24$Z_Frequency[j]<df$Z_Frequency[i+1]){
df24$Z_SSLOPE[j]=df$Z_Slope2[df24$Z_Frequency[j]>df$Z_Frequency[i] &
df24$Z_Frequency[j]<df$Z_Frequency[i+1]]}}}
预期输出如下
Z_Frequency Z_SSLOPE
1 5 0.0
2 6 0.7
3 7 0.7
4 8 0.7
5 9 0.7
6 10 0.7
7 11 -0.5
8 12 -0.5
9 13 -0.5
10 14 -0.5
11 15 -0.5
12 16 0.0
13 17 0.0
14 18 0.0
15 19 0.0
16 20 0.0
17 21 0.7
18 22 0.7
19 23 0.7
20 24 0.7
21 25 0.7
如果df24 $ Z_Frequency值在df $ Z_Frequency中找不到匹配项,则这些值将由df24 $ Z_Frequency的下一个可用匹配项填充。我得到以下输出。
Z_Frequency Z_SSLOPE
1 5 0.0
2 6 0.0
3 7 0.0
4 8 0.0
5 9 0.0
6 10 0.7
7 11 0.0
8 12 0.0
9 13 0.0
10 14 0.0
11 15 -0.5
12 16 0.0
13 17 0.0
14 18 0.0
15 19 0.0
16 20 0.0
17 21 0.0
18 22 0.0
19 23 0.0
20 24 0.0
21 25 0.7
if语句的第一部分有效。但是,我无法在if语句的else部分中发现错误。我需要别人的帮助。
答案 0 :(得分:1)
如果您对dplyr
没问题,我们可以dplyr::left_join
,然后tidyr::fill
向后退缩
library(dplyr)
library(tidyr)
df24 %>%
left_join(df) %>%
fill(Z_Slope2,.direction = 'up')