【问题标题】:Convert list df (with multiple columns) to numeric将列表 df(具有多列)转换为数字
【发布时间】:2021-02-10 19:29:07
【问题描述】:

我在下面有一个df:

view(fds)

   #1 #2 #3 #4
1# 1  3  4  2
2# 4  5  3  2
3# 2  5  3  1
4# 3  5  1  3

我想fds.sum <- rowSums(fds),但我得到一个“rowSums(fds) 中的错误:'x' 必须是数字”...然后,当我尝试fds.mun <- as.numeric(fds) 时,我得到一个“错误:'list' 对象不能强制输入'double'"...

我试过 fds.num <- lapply(fds, as.numeric) 但这给了我:

fds.num  list[4]        List of Length 4
 1#      double[101]    1 4 2 3
 2#      double[101]    3 5 5 5
 3#      double[101]    4 3 3 1
 4#      double[101]    2 2 1 3

我只想要一个新列中的行总和,这样:

   #1 #2 #3 #4 sum
1# 1  3  4  2  10
2# 4  5  3  2  14
3# 2  5  3  1  11
4# 3  5  1  3  12

有人知道怎么做吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    如果我们想使用 OP 的代码,只需 Reduce+

    fds$sum <- Reduce(`+`, lapply(fds, as.numeric) )
    

    或者转换成numeric之后,绑定成matrix或者更新原始数据

    fds[] <- lapply(fds, as.numeric)
    fds$sum <- rowSums(fds, na.rm = TRUE)
    

    或者可以通过sapply即时完成

    fds$sum <- rowSums(sapply(fds, as.numeric))
    

    或者即使不做as.numeric,也可以用type.convert自动化

    fds$sum <- rowSums(type.convert(fds, as.is = TRUE))
    

    OP 代码中显示的error 是直接在list 上应用rowSums 的结果,因为lapply 总是返回list

    【讨论】:

      猜你喜欢
      • 2019-07-25
      • 1970-01-01
      • 2016-09-17
      • 2019-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 2018-12-04
      相关资源
      最近更新 更多