AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 77108042
Accepted
JVGen
JVGen
Asked: 2023-09-15 04:03:08 +0800 CST2023-09-15 04:03:08 +0800 CST 2023-09-15 04:03:08 +0800 CST

R:调整范围从0开始,相应调整数据帧值

  • 772

我有一个包含两列数值的数据框。我想调整值的范围,同时保持数值之间的相对距离。这个例子更好地解释了这一点。

是否有一个标准函数可以完成此任务?

df <- data.frame(
  Name = c("A", "B", "C", "D", "E"),
  Start = c(175000, 183597, 185317, 188307, 191390),
  Stop = c(182548, 184724, 187841, 188599, 192650)
)

Range_Start <- df$Start[df$Name=="C"] - 10000
Range_Stop <- df$Stop[df$Name=="C"] + 10000

Range_Start2 <- 1
Range_Stop2 <- length(Range_Start:Range_Stop)

df2 <- df %>%
  rowwise() %>%
  dplyr::mutate(Start2 = Start - Range_Start) %>%
  dplyr::mutate(Stop2 = Stop - Range_Start)

期望值:

> df2$Start2
[1]  -317  8280 10000 12990 16073

> df2$Stop2
[1]  7231  9407 12524 13282 17333
  • 2 2 个回答
  • 25 Views

2 个回答

  • Voted
  1. Best Answer
    2023-09-15T04:09:28+08:002023-09-15T04:09:28+08:00

    无需前往rowwise:

    df <- structure(list(Name = c("A", "B", "C", "D", "E"), Start = c(181391, 183597, 185317, 188307, 191390), Stop = c(182548, 184724, 187841, 188599, 192650)), class = "data.frame", row.names = c(NA, -5L))
    df2 <- structure(list(Name = c("A", "B", "C", "D", "E"), Start = c(181391, 183597, 185317, 188307, 191390), Stop = c(182548, 184724, 187841, 188599, 192650), Start2 = c(6074, 8280, 10000, 12990, 16073), Stop2 = c(7231, 9407, 12524, 13282, 17333)), class = c("rowwise_df", "tbl_df", "tbl", "data.frame"), row.names = c(NA, -5L), groups = structure(list(.rows = structure(list(1L, 2L, 3L, 4L, 5L), ptype = integer(0), class = c("vctrs_list_of", "vctrs_vctr", "list"))), row.names = c(NA, -5L), class = c("tbl_df",  "tbl", "data.frame")))
    
    out <- df %>%
      mutate(
        Start2 = Start - Start[Name == "C"] + 10000,
        Stop2 = Start2 + (Stop - Start)
      )
    out
    #   Name  Start   Stop Start2 Stop2
    # 1    A 181391 182548   6074  7231
    # 2    B 183597 184724   8280  9407
    # 3    C 185317 187841  10000 12524
    # 4    D 188307 188599  12990 13282
    # 5    E 191390 192650  16073 17333
    
    all.equal(out, df2, check.attributes = FALSE)
    # [1] TRUE
    

    使用更新的数据重新运行:

    df <- structure(list(Name = c("A", "B", "C", "D", "E"), Start = c(175000, 183597, 185317, 188307, 191390), Stop = c(182548, 184724, 187841, 188599, 192650)), class = "data.frame", row.names = c(NA, -5L))
    df2 <- structure(list(Name = c("A", "B", "C", "D", "E"), Start = c(175000, 183597, 185317, 188307, 191390), Stop = c(182548, 184724, 187841, 188599, 192650), Start2 = c(-317, 8280, 10000, 12990, 16073), Stop2 = c(7231, 9407, 12524, 13282, 17333)), class = c("rowwise_df", "tbl_df", "tbl", "data.frame"), row.names = c(NA, -5L), groups = structure(list(.rows = structure(list(1L, 2L, 3L, 4L, 5L), ptype = integer(0), class = c("vctrs_list_of", "vctrs_vctr", "list"))), row.names = c(NA, -5L), class = c("tbl_df",  "tbl", "data.frame")))
    
    out <- df %>%
      mutate(
        Start2 = Start - Start[Name == "C"] + 10000,
        Stop2 = Start2 + (Stop - Start)
      )
    out
    #   Name  Start   Stop Start2 Stop2
    # 1    A 175000 182548   -317  7231
    # 2    B 183597 184724   8280  9407
    # 3    C 185317 187841  10000 12524
    # 4    D 188307 188599  12990 13282
    # 5    E 191390 192650  16073 17333
    all.equal(out, df2, check.attributes = FALSE)
    # [1] TRUE
    
    • 2
  2. 2023-09-15T04:16:22+08:002023-09-15T04:16:22+08:00

    要对多个列执行相同的操作(在本例中减去固定数量),我们可以使用acrossinsidemutate

    mutate(df, across(2:3, ~ .x - (Start[Name == "C"] - 1e4), .names = "{.col}2"))
    #   Name  Start   Stop Start2 Stop2
    # 1    A 181391 182548   6074  7231
    # 2    B 183597 184724   8280  9407
    # 3    C 185317 187841  10000 12524
    # 4    D 188307 188599  12990 13282
    # 5    E 191390 192650  16073 17333
    
    • 0

相关问题

  • 将复制活动的序列号添加到 Blob

  • Packer 动态源重复工件

  • 选择每组连续 1 的行

  • 图形 API 调用列表 subscribedSkus 状态权限不足,但已授予权限

  • 根据列值创建单独的 DF 的函数

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve