【问题标题】:as.numeric function not working in a nester for loopas.numeric 函数在嵌套的 for 循环中不起作用
【发布时间】:2021-05-11 21:32:29
【问题描述】:
for (i in c(1:ncol(final_targets))) {
  for (j in c(2:nrow(final_targets))) {
  final_targets[j,i] <- as.numeric(final_targets[j,i])
  }
}

data.class(final_targets[2,1]) [1] “人物”

无论我使用什么,输出总是显示为字符。我试过 as.integer,as.double。没用。

【问题讨论】:

    标签: r for-loop data-class nested-for-loop


    【解决方案1】:

    我们只需要一个循环而不是嵌套循环。 types 特定于列,可以直接分配。但是,如果我们也循环遍历行,然后尝试分配行的每个元素,它不会起作用,因为其他值是 character 并且列类型仍然是 character

    for(i in seq_along(final_targets)) {
         final_targets[,i] <- as.numeric(final_targets[,i])
     }
    

    【讨论】:

    • 嵌套循环的主要目的是避免将数据框的第一行变成数字。如果没有嵌套,我该怎么做?
    • @SiddarthReddy 正如我在描述中提到的那样,data.frame 中的单元是列并且类型特定于列而不是元素,除非您将其更改为 list 列,否则这是不可能的
    • @SiddarthReddy 你不能在一个列中有多种类型
    【解决方案2】:

    函数as.numeric() 是矢量化的。不需要嵌套循环,只需要循环 akrun 提到的列即可。


    您也可以使用dplyr 轻松做到这一点,

    final_targets%>%mutate(across(everything(), as.numeric))
    

    有基础R

    sapply(final_targets, as.numeric)
    

    或者purrr

    map_dbl(final_targets, as.numeric)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      • 1970-01-01
      • 2018-12-03
      • 1970-01-01
      相关资源
      最近更新 更多