【问题标题】:dataset value substition not yielding expected result数据集值替换未产生预期结果
【发布时间】:2019-02-04 11:16:30
【问题描述】:

我在 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_Frequencydf$Z_Frequency 的值来填充df24$Z_SSLOPE 列的值:如果df24$Z_Frequency 的值与df$Z_Frequency 的值相同,则df24$Z_SSLOPE 列的值将是从df$Z_Slope2复制。
我已经为此编写了以下代码循环。

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 部分发现错误。我请求别人的帮助。

【问题讨论】:

    标签: r for-loop if-statement


    【解决方案1】:

    如果您对dplyr 没有问题,我们可以dplyr::left_join 然后tidyr::fill 向后差距

    library(dplyr)
    library(tidyr)
    
    df24 %>% 
     left_join(df) %>% 
     fill(Z_Slope2,.direction = 'up')
    

    【讨论】:

    • 左连接是否类似于sql连接
    • 据我所知,这是同一个概念。但可以肯定的是,请检查?left_joinhelp(left_join)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 2011-07-26
    相关资源
    最近更新 更多