【问题标题】:Coerce specific column to "double" within a dataframe list强制特定列在数据框列表中“加倍”
【发布时间】:2021-01-23 21:40:05
【问题描述】:

假设我有一个数据框列表

 myList <- list(df1 = data.frame(A = as.character(sample(10)), B =
 rep(1:2, 10)), df2 = data.frame(A = as.character(sample(10)), B = rep(1:2, 10)) )

我想强制每个数据框中的 A 列加倍。

我正在尝试:

myList =  sapply(myList,simplify = FALSE, function(x){  
x$A <- as.double(x$A) })

但这会返回强制值,甚至不会返回带有列名的列。

我也尝试过使用 dplyr 和 mutate_if,但没有成功

【问题讨论】:

    标签: r list dplyr


    【解决方案1】:

    我们可以在base R 中使用lapplytransform

    myList2 <- lapply(myList, transform, A = as.double(A))
    

    或者使用mapmutate 来自tidyverse

    library(dplyr)
    library(purrr)
    myList2 <- map(myList, ~ .x %>%
                          mutate(A = as.double(A)))
    

    OP 代码中的问题是它没有返回数据,即“x”。

    myList2 <-  sapply(myList, simplify = FALSE,
           function(x){  
                   x$A <- as.double(x$A)
                   x
                })
    

    【讨论】:

    • 我在代码中找不到错误,感谢您的完整回复!
    • @GabrielG。代码中没有错误。只是没有指定return。因此,它返回最后一个分配而不是完整数据'x'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多