【问题标题】:R: Try to fill in a column with values by certain conditionR:尝试用特定条件的值填充一列
【发布时间】:2020-03-16 18:04:00
【问题描述】:

我真的需要关于 R 中以下任务的建议: 我有一个时间列和一个间隔。对于以后的聚合,我必须设置时间间隔。 例子: 我有桌子:

time   interval

1        NA
2        NA
3        NA
4        NA
5        NA
6        NA

期待:

time   interval
1          5
2          5
3          5
4          5
5          5
6         10  
14        15

代码:

count=0
dt = 5
dt_temp = 5

for (i in df_start$time){

if (i<dt) {
df_start$interval[count] =dt

}else{
dt= dt+dt_temp
df_start$interval[count] =dt
}
count = count+1
}

结果(或查看图片):

time    interval
1           5
2           5
3           5
4           5
4.946      10  (wrong)
5.021      15  (totally wrong)
6.023      20  (totally wrong)

我真的要疯了,因为我坐了将近半天才发现问题。 提前致谢!

Image of my solution

【问题讨论】:

    标签: r for-loop if-statement intervals


    【解决方案1】:

    这是一个基本的 R 解决方案,其中使用了ceiling

    df$interval <- ceiling(df$time/5)*5
    

    这样

    > df
      time interval
    1    1        5
    2    2        5
    3    3        5
    4    4        5
    5    5        5
    6    6       10
    7   14       15
    

    数据

    df <- structure(list(time = c(1L, 2L, 3L, 4L, 5L, 6L, 14L)), row.names = c(NA, 
    -7L), class = "data.frame")
    
    

    【讨论】:

    • 谢谢你:)。最好的解决方案,因为 for 循环太慢了。有 777411 次观察
    【解决方案2】:
    df_start$interval = ((df_start$time - 1) %/% 5 + 1) *5
    

    【讨论】:

    • 谢谢你:)。使用您的解决方案,我注意到,我的数据类型仍然是一个字符
    【解决方案3】:

    试试这个代码:

    df_start <- data.frame(time = c(1,2,3,4,5,6,14), interval = 0)
    
    count= 1
    
    dt = 5
    
    dt_temp = 5
    
    for (i in df_start$time){
    
    if (i<=dt) {
    df_start$interval[count] =dt
    
    }else{
    dt= dt+dt_temp
    df_start$interval[count] =dt
    }
    count = count+1
    }
    

    【讨论】:

    • 谢谢你们。我真的很感谢你的帮助!我已经发现了我犯的错误。因为我读了一个 csv.data,我忘了检查数据类型。它们都是字符串,因此我无法进行任何合理的比较。
    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 2022-01-05
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 2022-01-15
    • 2021-04-20
    相关资源
    最近更新 更多