如何使用R中的一个循环将多个列转换为特定列的数值?

jei2mxaa  于 2023-01-03  发布在  其他
关注(0)|答案(2)|浏览(117)

从这里开始:我有一个 Dataframe ,其中包含多个列,这些列当前是包含$符号和空格的字符串,我想将它们转换为数字。

Name  Col_x_1    Company  Col_x_2  Start_Year  End_Year  Col_x_3
asd   $841 392   Test     $31 000  1902        1933      0
kfj   0          Test_2   0        1933        1954      $10 000
ale   $200 000   Test_3   0        1988        1999      0
...

我目前正在使用以下代码对名为Col_x_的列进行循环,因为它们的名称都是相同的,并且是按升序排列的:

library(tidyverse)

df %>% 
  mutate(across(starts_with("Col_x_"), ~gsub("\\$", "", .) %>% 
                  as.numeric())
         )

然而,这只给了我NAs,因为as.numeric()不起作用。有人知道我如何修复这段代码吗?提前谢谢你!

cbjzeqam

cbjzeqam1#

library(tidyverse)

df %>%
  mutate(across(starts_with("Col_x_"), ~ str_remove_all(.x, "[^0-9]"))) %>%
  type_convert()

# A tibble: 3 × 7
  Name  Col_x_1 Company Col_x_2 Start_Year End_Year Col_x_3
  <chr>   <dbl> <chr>     <dbl>      <dbl>    <dbl>   <dbl>
1 asd    841392 Test      31000       1902     1933       0
2 kfj         0 Test_2        0       1933     1954   10000
3 ale    200000 Test_3        0       1988     1999       0
aor9mmx1

aor9mmx12#

除了评论中的解决方案外,您还可以使用{readr}的便利功能,例如:

library(readr)

my_locale <- locale(grouping_mark = " ")

作用:

> parse_number("$12 235", locale = my_locale)
[1] 12235

相关问题