【问题标题】:creating new column in r based on a value every cycle of 10根据每个周期 10 的值在 r 中创建新列
【发布时间】:2023-03-24 21:00:01
【问题描述】:

R 和计算机科学新手,非常感谢您的帮助

试图弄清楚如何在数据框中创建一个与 (x) 的值对应的新列 (y),x 中的每个 10 值都应该赋予一个新的 y。很难解释,不知道从哪里开始使用循环或 if 语句。例如当前数据集

 event_id   x
      1     0
      2     2
      3     5
      4     11
      5     12 
      6     17
      7     25
      8     28
      9     30
      10    34

但我希望它看起来像这样

 event_id   x    y
      1     0    1
      2     2    1
      3     5    1
      4     11   2
      5     12   2
      6     17   2
      7     25   3
      8     28   3 
      9     30   3
      10    34   4

希望这是有道理的,因为前 3 个值都

【问题讨论】:

  • 您的预期输出中有 0 -> 1 和 30 ->3。这些似乎有点不相容。您能否澄清 x=10 的预期行为(即 y 应该是 1 还是 2?),以及 x=20... 以及您是否肯定希望 x=0 打破这种模式,或者 x=0 是否应该给出 y=0 ?

标签: r loops dataframe


【解决方案1】:
df$y <- with(
  df, 
  findInterval(x, seq(0, max(x) + 10, by = 10))
)

df
   event_id  x y
1         1  0 1
2         2  2 1
3         3  5 1
4         4 11 2
5         5 12 2
6         6 17 2
7         7 25 3
8         8 28 3
9         9 30 4
10       10 34 4

这假设 30 应该映射到 4,就像 0 映射到 1。

【讨论】:

    【解决方案2】:

    你可以使用

    df$y = df$x %/% 10 + 1
    

    【讨论】:

    • df$x %/% 11 + 1
    • @PoGibas - 不,%/% 11 不正确。试试120 %/% 11 + 1,或者c(21,22) %/% 11 + 1,你会发现这不起作用
    【解决方案3】:
    df$y <- floor(df$x / 10.1) + 1
    

    匹配 OP 请求:

    #   event_id  x y
    #1         1  0 1
    #2         2  2 1
    #3         3  5 1
    #4         4 11 2
    #5         5 12 2
    #6         6 17 2
    #7         7 25 3
    #8         8 28 3
    #9         9 30 3
    #10       10 34 4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 2022-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多