【发布时间】:2016-08-02 15:52:53
【问题描述】:
我在数据框中有一列,如下所示:
D0.5
A4
C1.3
B2.0
我希望能够拆分列,以便第一个条目(始终是单个字符)与条目的其余部分(始终是数字,但根据条目的长度不同)分开
我想基本上完全做到这一点,除了在第一个条目而不是第 5 个和在 R 中而不是 php 之后。
【问题讨论】:
我在数据框中有一列,如下所示:
D0.5
A4
C1.3
B2.0
我希望能够拆分列,以便第一个条目(始终是单个字符)与条目的其余部分(始终是数字,但根据条目的长度不同)分开
我想基本上完全做到这一点,除了在第一个条目而不是第 5 个和在 R 中而不是 php 之后。
【问题讨论】:
你可以使用substring
x <- c("D0.5", "A4", "C1.3", "B2.0")
substring(x, 1, 1)
[1] "D" "A" "C" "B"
只获取数字部分:
as.numeric(substring(x, 2, nchar(x)))
[1] 0.5 4.0 1.3 2.0
或者使用stringi:
as.numeric(stringi::stri_sub(x, 2))
并使用stringr:
as.numeric(stringr::str_sub(x, 2))
对于stringi 和stringr,2 代表起始位置。如果需要,您可以包含结束位置,否则默认情况下它是最后一个字符。
【讨论】:
data.frame(cbind(Letter=str_sub(x, 1, 1), Number=str_sub(x, 2)))(其中x 是输入向量)。
cbind 的情况下使用您的建议会更容易。 cbind 会将列转换为因子
data.frame(Letter=str_sub(x, 1, 1), Number=as.numeric(str_sub(x, 2)), stringsAsFactors = FALSE)(或这个的一些变体)。
我们可以使用sub
as.numeric(sub("^.(.*)", "\\1", v1))
#[1] 0.5 4.0 1.3 2.0
或者
library(tidyr)
extract_numeric(v1)
#[1] 0.5 4.0 1.3 2.0
v1 <- c("D0.5", "A4", "C1.3", "B2.0")
【讨论】: