Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
274 views
in Technique[技术] by (71.8m points)

r - Coerce specific column to "double" within a dataframe list

Let's say I have a list of dataframes

 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)) )

I want to coerce column A in each dataframe to double.

I'm trying:

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

But this returns the coerced values, not even column with column names.

I also tried with dplyr and mutate_if, but with no success

question from:https://stackoverflow.com/questions/65864706/coerce-specific-column-to-double-within-a-dataframe-list

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

We can use lapply with transform in base R

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

Or use map with mutate from tidyverse

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

The issue in the OP's code is that it is not returning the data i.e. 'x'.

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...