r语言 - 如何提取 - 从尾部签名并将其放在数字之前



我得到了一个.txt文件,它在数字的末尾有符号。

当我尝试将其转换为数字时,-ve 值将变为 NA,因为数据是字符格式。我什至尝试过,标记这些 -ve 值并将标记的值乘以"-1"。

因为我有大约 25 个这样的专栏。它变得越来越复杂。 谁能建议我简单的方法来做到这一点。

以下是我准备的示例数据,

R1 <- c("15515.88-","5156.04","65656","1566.1-")
R2 <- c("515","5156.11-","415-","1455-")
R3 <- c("123.14-","9875-","1247-","778.04-")
df <- data.frame(R1,R2,R3)

我的预期输出是首字母处的 -ve 符号,

R1         R2        R3
-15515.88     515      -123.14
5156.04     -5156.11  -9875
65656       -415      -1247
-1566.1      -1455     -778.04

需要您的帮助

在基本 R 中,您可以使用 lapply 使用正则表达式一次处理一列并转换为数字。

df[] <- lapply(df, function(x) as.numeric(sub("(.+)(-)", "\2\1", x)))
df
#          R1       R2       R3
# 1 -15515.88   515.00  -123.14
# 2   5156.04 -5156.11 -9875.00
# 3  65656.00  -415.00 -1247.00
# 4  -1566.10 -1455.00  -778.04

base R 中的一个解决方案是

df[] <- lapply(df, function(x) {as.numeric(ifelse(grepl("-", x), paste0("-", gsub("-", "", x)), x))})

基本上它的工作原理是这样的:如果存在-,则将其删除并在值的开头添加另一个-,然后将列转换为数字。

输出

#          R1       R2       R3
# 1 -15515.88   515.00  -123.14
# 2   5156.04 -5156.11 -9875.00
# 3  65656.00  -415.00 -1247.00
# 4  -1566.10 -1455.00  -778.04
rep.format <- function(num){
ind <- grepl("-", num)
num[ind] <-  paste0("-", sub("-", "", num[ind]), "")
num
}
R1 <- c("15515.88-","5156.04","65656","1566.1-")
R2 <- c("515","5156.11-","415-","1455-")
R3 <- c("123.14-","9875-","1247-","778.04-")
df <- data.frame(rep.format(R1),rep.format(R2),rep.format(R3))
df

我希望这有帮助!

相关内容

  • 没有找到相关文章

最新更新