从 R 中的数据框中更改具有特定字符的值
Changing the Values with Specific Character from Data Frame in R
我的数据框是这样的。
X Y Z
10.5 m³/s 15. m³/s 14.3 m³/s
10. m³/s 11. 5m³/s 16.7 m³/s
10.8 m³/s 15.7 m³/s 1.5 m³/s
我必须从我的数据框中删除一些特定的字符。为了解决这个问题,我写了一些这样的代码。
df[] <- lapply(df,gsub, pattern='. m³/s', replacement='')
好像成功了。但是我遇到了“。”最初是数据形状的问题。
X Y Z
10.5 15. 14.3
10. 11.5 16.7
10.8 15.7 1.5
以及我对模式功能的所有组合。
我需要双精度值,所以我必须删除位于值末尾的点。
感谢您的帮助。
您可以通过添加匹配文字“.”的正则表达式 \.?
来计算整数值中的小数点。如果出现一次或零次。
d <- data.frame(X = "10.5 m³/s", Y = "15. m³/s", Z = "14.3 m³/s")
lapply(d, gsub, pattern='\.? m³/s', replacement='')
$X
[1] "10.5"
$Y
[1] "15"
$Z
[1] "14.3"
也许readr::parse_number()
也是一个选项?
library(dplyr)
df %>% mutate(across(everything(), readr::parse_number))
结果:
# A tibble: 3 x 3
X Y Z
<dbl> <dbl> <dbl>
1 10.5 15 14.3
2 10 11 16.7
3 10.8 15.7 1.5
library(tidyverse)
df %>% mutate(across(X:Z,~as.double(str_remove_all(.x, " |m³/s"))))
输出:
# A tibble: 3 × 3
X Y Z
<dbl> <dbl> <dbl>
1 10.5 15 14.3
2 10 11.5 16.7
3 10.8 15.7 1.5
输入:
structure(list(X = c("10.5 m³/s", "10. m³/s", "10.8 m³/s"),
Y = c("15. m³/s", "11. 5m³/s", "15.7 m³/s"), Z = c("14.3 m³/s",
"16.7 m³/s", "1.5 m³/s")), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -3L))
我的数据框是这样的。
X Y Z
10.5 m³/s 15. m³/s 14.3 m³/s
10. m³/s 11. 5m³/s 16.7 m³/s
10.8 m³/s 15.7 m³/s 1.5 m³/s
我必须从我的数据框中删除一些特定的字符。为了解决这个问题,我写了一些这样的代码。
df[] <- lapply(df,gsub, pattern='. m³/s', replacement='')
好像成功了。但是我遇到了“。”最初是数据形状的问题。
X Y Z
10.5 15. 14.3
10. 11.5 16.7
10.8 15.7 1.5
以及我对模式功能的所有组合。
我需要双精度值,所以我必须删除位于值末尾的点。
感谢您的帮助。
您可以通过添加匹配文字“.”的正则表达式 \.?
来计算整数值中的小数点。如果出现一次或零次。
d <- data.frame(X = "10.5 m³/s", Y = "15. m³/s", Z = "14.3 m³/s")
lapply(d, gsub, pattern='\.? m³/s', replacement='')
$X
[1] "10.5"
$Y
[1] "15"
$Z
[1] "14.3"
也许readr::parse_number()
也是一个选项?
library(dplyr)
df %>% mutate(across(everything(), readr::parse_number))
结果:
# A tibble: 3 x 3
X Y Z
<dbl> <dbl> <dbl>
1 10.5 15 14.3
2 10 11 16.7
3 10.8 15.7 1.5
library(tidyverse)
df %>% mutate(across(X:Z,~as.double(str_remove_all(.x, " |m³/s"))))
输出:
# A tibble: 3 × 3
X Y Z
<dbl> <dbl> <dbl>
1 10.5 15 14.3
2 10 11.5 16.7
3 10.8 15.7 1.5
输入:
structure(list(X = c("10.5 m³/s", "10. m³/s", "10.8 m³/s"),
Y = c("15. m³/s", "11. 5m³/s", "15.7 m³/s"), Z = c("14.3 m³/s",
"16.7 m³/s", "1.5 m³/s")), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -3L))