【问题标题】:Split number by decimal [duplicate]按十进制拆分数字[重复]
【发布时间】:2017-04-28 10:20:21
【问题描述】:

我正在尝试将带小数的数字拆分为 2 个单独的数字(字符也可以)。

a <- c(1241.3233, 5632.2344, 1313,8643)

我想退货

col1    col2
1241    3233
5632    2344
1313    8643

我试过了

strsplit(as.character(a), ".")

stringr::str_split(a,".")

没有成功。

【问题讨论】:

  • strsplit(as.character(1241.3233),"\\.")
  • 您可能希望保持小数位一致。任何一个 ”。”或“,”
  • UpV for d.b. 但是 ericbrownaustin 应该仔细阅读 ?regex 以便他理解为什么是“.”。将匹配任何字符。 SO 上必须有 10 或 20 个类似的问题。
  • 你可以使用csplit from splitstackshape , cSplit(data.frame(a), "a", ".")
  • 十进制?小数是 0-9 范围内的数字。你的意思是'小数'吗?

标签: r


【解决方案1】:

两点:

1) 使用 as.character 将数字强制转换为字符串

2) 使用\\转义句号

a = c(1241.3233, 5632.2344, 1313.8643)
do.call(rbind, strsplit(as.character(a),"\\."))
#     [,1]   [,2]  
#[1,] "1241" "3233"
#[2,] "5632" "2344"
#[3,] "1313" "8643"

【讨论】:

    【解决方案2】:

    如果您正在处理数据框,并且您想要的输出将是一个数据框。 tidyr 中的 separate 函数可能很有用。这是一个例子。

    library(tidyverse)
    
    # Create example data frame
    dt <- data.frame(a = c(1241.3233, 5632.2344, 1313.8643))
    
    # Separate the column a into col1 and col2
    dt2 <- dt %>%
      separate(a, into = c("col1", "col2"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多