gpt4 book ai didi

r - 在数据帧上使用应用时如何避免隐式字符转换

转载 作者:行者123 更新时间:2023-12-03 22:35:53 24 4
gpt4 key购买 nike

使用时 apply在 data.frame 上,参数被(隐式)转换为字符。一个例子:

df <- data.frame(v=1:10, t=1:10)
df <- transform(df, t2 = as.POSIXlt(t, origin = "2013-08-13"))
class(df$t2[1])
## [1] "POSIXct" "POSIXt" (correct)

但:
 apply(df, 1, function(y) class(y["t2"]))
## [1] "character" "character" "character" "character" "character" "character"
## [7] "character" "character" "character" "character"

有什么办法可以避免这种转换吗?或者我总是必须通过 as.POSIXlt(y["t2"]) 转换回来?

编辑
我的 df 有 2 个时间戳(比如 t2 和 t3)和其他一些字段(比如 v1、v2)。对于给定 t2 的每一行,我想找到 k(例如 3)行 t3 最接近但低于 t2(和相同的 v1),并从这些行返回 v2 的统计数据(例如平均值)。我写了一个函数 f(t2, v1, df) 并且只想使用 apply(df, 1, function(x) f(y["t2"], y["v1"], df) 将它应用于所有行.有没有更好的方法在 R 中做这样的事情?

最佳答案

让我们将多个评论包装成一个解释。

  • apply的使用转换 data.framematrix .这个
    意味着将使用限制最少的类。至少
    在这种情况下限制是字符。
  • 您正在供应 1applyMARGIN争论。这适用
    逐行让你更糟,因为你真的在混课
    现在在一起。在这种情况下,您使用的是 apply专为矩阵设计
    和向量上的 data.frames。这不是完成这项工作的正确工具。
  • 在这种情况下,我会使用 lapplysapply正如 rmk 指出的那样捕获类
    单个 t2 列如下所示:

  • 代码:
    df <- data.frame(v=1:10, t=1:10)
    df <- transform(df, t2 = as.POSIXlt(t, origin = "2013-08-13"))

    sapply(df[, "t2"], class)
    lapply(df[, "t2"], class)

    ## [[1]]
    ## [1] "POSIXct" "POSIXt"
    ##
    ## [[2]]
    ## [1] "POSIXct" "POSIXt"
    ##
    ## [[3]]
    ## [1] "POSIXct" "POSIXt"
    ##
    ## .
    ## .
    ## .
    ##
    ## [[9]]
    ## [1] "POSIXct" "POSIXt"
    ##
    ## [[10]]
    ## [1] "POSIXct" "POSIXt"

    一般你选择 apply适合工作的家庭。我个人经常使用 lapplyfor循环对特定列进行操作或使用索引( [, ] )对我想要的列进行子集,然后继续 apply .这个问题的答案真的归结为确定你想要完成什么,问是 apply最合适的工具,然后从那里开始。

    我可以提供这个 blog post作为关于不同之处的优秀教程 apply函数族做。

    关于r - 在数据帧上使用应用时如何避免隐式字符转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18214431/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com