首页 > 解决方案 > 如果一行符合条件,请粘贴到 R

问题描述

假设您有一个包含两列IDPOSITION. 我想根据 ID 值粘贴一些文本。

我想将 ID 值与GK0000(当 ID>10 时)或GK00000(当 ID<10 时)连同.2:POSITION..和以下POSITION(POSITION+1)一起粘贴

例如,如果ID = 1POSITION = 10,结果将是GK000001.2:10..11并且如果ID = 10POSITION = 10,结果将是GK000010.2:10..11

在 Excel 中,我可以使用AasIDBas POSITIONusing=IF(A2<10,CONCATENATE("GK00000",A2,".2:",B2,"..",B2+1),CONCATENATE("GK0000",A2,".2:",B2,"..",B2+1))但我想将它添加到我的 R 脚本行中。

我给你一个简短的例子来说明我的输入数据

ID <- c(1,5,9,10,12)
POSITION <- c(10,50,90,100,120)
df <- cbind(ID,POSITION)

我期待的结果是

CONCAT <- c("GK000001.2:10..11","GK000005.2:50..51","GK000009.2:90..91",
            "GK000010.2:100..101","GK000012.2:120..121")
dfResult <- cbind(ID,POSITION,CONCAT)

标签: rfor-loopif-statementpaste

解决方案


我相信这个问题要求给定两个参数和一些数字的字符串A格式B

concat <- function(A, B, digits = 6){
  fmt <- paste0("%0", digits, "d")
  fmt <- paste0("GK", fmt, ".2:%d..%d")
  sprintf(fmt, A, B, B + 1)
}

concat(df[, 'ID'], df[, 'POSITION'], 6)
# [1] "GK000001.2:10..11"   "GK000002.2:20..21"   "GK000003.2:30..31"  
# [4] "GK000004.2:40..41"   "GK000005.2:50..51"   "GK000006.2:60..61"  
# [7] "GK000007.2:70..71"   "GK000008.2:80..81"   "GK000009.2:90..91"  
#[10] "GK000010.2:100..101" "GK000011.2:110..111" "GK000012.2:120..121"

推荐阅读