Convert Multiple Column Classes
up vote
5
down vote
favorite
I think this is a simple question but I haven't found a suitable solution. To begin with a set of simplified data :
df <- as.data.frame(matrix(1:20, 5, 4))
str(df)
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: int 6 7 8 9 10
# $ V3: int 11 12 13 14 15
# $ V4: int 16 17 18 19 20
We can see that all the classes are the integer. What I wanna achieve is converting the 4 classes to integer, numeric, character, and factor respectively. Of course, I can use
df$V1 <- as.XXX(df$V1)
for each column, but I think it's inefficient.
Expected Output
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: num 6 7 8 9 10
# $ V3: chr "11" "12" "13" "14" ...
# $ V4: Factor w/ 5 levels "16","17","18",..: 1 2 3 4 5
Question 2
I reference @joran's answer in R Assign (or copy) column classes from a data frame to another and run the following code :
myclass <- c("integer", "numeric", "character", "factor")
df.2 <- df
df.2 <- mapply(FUN = as, df.2, myclass, SIMPLIFY = F)
When I call df.2
, an error appears :
Error in as.character.factor(x) : malformed factor
However, It's okay to call str(df.2)
, and apparently only V1
and V3
reach my request.
str(df.2)
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: int 6 7 8 9 10
# $ V3: chr "11" "12" "13" "14" ...
# $ V4:Formal class 'factor' [package "methods"] with 3 slots
# .. ..@ .Data : int 16 17 18 19 20
# .. ..@ levels : chr
# .. ..@ .S3Class: chr "factor"
Why cannot as
function deal with classes numeric
and factor
?
r dataframe
add a comment |
up vote
5
down vote
favorite
I think this is a simple question but I haven't found a suitable solution. To begin with a set of simplified data :
df <- as.data.frame(matrix(1:20, 5, 4))
str(df)
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: int 6 7 8 9 10
# $ V3: int 11 12 13 14 15
# $ V4: int 16 17 18 19 20
We can see that all the classes are the integer. What I wanna achieve is converting the 4 classes to integer, numeric, character, and factor respectively. Of course, I can use
df$V1 <- as.XXX(df$V1)
for each column, but I think it's inefficient.
Expected Output
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: num 6 7 8 9 10
# $ V3: chr "11" "12" "13" "14" ...
# $ V4: Factor w/ 5 levels "16","17","18",..: 1 2 3 4 5
Question 2
I reference @joran's answer in R Assign (or copy) column classes from a data frame to another and run the following code :
myclass <- c("integer", "numeric", "character", "factor")
df.2 <- df
df.2 <- mapply(FUN = as, df.2, myclass, SIMPLIFY = F)
When I call df.2
, an error appears :
Error in as.character.factor(x) : malformed factor
However, It's okay to call str(df.2)
, and apparently only V1
and V3
reach my request.
str(df.2)
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: int 6 7 8 9 10
# $ V3: chr "11" "12" "13" "14" ...
# $ V4:Formal class 'factor' [package "methods"] with 3 slots
# .. ..@ .Data : int 16 17 18 19 20
# .. ..@ levels : chr
# .. ..@ .S3Class: chr "factor"
Why cannot as
function deal with classes numeric
and factor
?
r dataframe
add a comment |
up vote
5
down vote
favorite
up vote
5
down vote
favorite
I think this is a simple question but I haven't found a suitable solution. To begin with a set of simplified data :
df <- as.data.frame(matrix(1:20, 5, 4))
str(df)
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: int 6 7 8 9 10
# $ V3: int 11 12 13 14 15
# $ V4: int 16 17 18 19 20
We can see that all the classes are the integer. What I wanna achieve is converting the 4 classes to integer, numeric, character, and factor respectively. Of course, I can use
df$V1 <- as.XXX(df$V1)
for each column, but I think it's inefficient.
Expected Output
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: num 6 7 8 9 10
# $ V3: chr "11" "12" "13" "14" ...
# $ V4: Factor w/ 5 levels "16","17","18",..: 1 2 3 4 5
Question 2
I reference @joran's answer in R Assign (or copy) column classes from a data frame to another and run the following code :
myclass <- c("integer", "numeric", "character", "factor")
df.2 <- df
df.2 <- mapply(FUN = as, df.2, myclass, SIMPLIFY = F)
When I call df.2
, an error appears :
Error in as.character.factor(x) : malformed factor
However, It's okay to call str(df.2)
, and apparently only V1
and V3
reach my request.
str(df.2)
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: int 6 7 8 9 10
# $ V3: chr "11" "12" "13" "14" ...
# $ V4:Formal class 'factor' [package "methods"] with 3 slots
# .. ..@ .Data : int 16 17 18 19 20
# .. ..@ levels : chr
# .. ..@ .S3Class: chr "factor"
Why cannot as
function deal with classes numeric
and factor
?
r dataframe
I think this is a simple question but I haven't found a suitable solution. To begin with a set of simplified data :
df <- as.data.frame(matrix(1:20, 5, 4))
str(df)
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: int 6 7 8 9 10
# $ V3: int 11 12 13 14 15
# $ V4: int 16 17 18 19 20
We can see that all the classes are the integer. What I wanna achieve is converting the 4 classes to integer, numeric, character, and factor respectively. Of course, I can use
df$V1 <- as.XXX(df$V1)
for each column, but I think it's inefficient.
Expected Output
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: num 6 7 8 9 10
# $ V3: chr "11" "12" "13" "14" ...
# $ V4: Factor w/ 5 levels "16","17","18",..: 1 2 3 4 5
Question 2
I reference @joran's answer in R Assign (or copy) column classes from a data frame to another and run the following code :
myclass <- c("integer", "numeric", "character", "factor")
df.2 <- df
df.2 <- mapply(FUN = as, df.2, myclass, SIMPLIFY = F)
When I call df.2
, an error appears :
Error in as.character.factor(x) : malformed factor
However, It's okay to call str(df.2)
, and apparently only V1
and V3
reach my request.
str(df.2)
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: int 6 7 8 9 10
# $ V3: chr "11" "12" "13" "14" ...
# $ V4:Formal class 'factor' [package "methods"] with 3 slots
# .. ..@ .Data : int 16 17 18 19 20
# .. ..@ levels : chr
# .. ..@ .S3Class: chr "factor"
Why cannot as
function deal with classes numeric
and factor
?
r dataframe
r dataframe
edited Nov 10 at 19:03
asked Nov 10 at 18:24
Darren Tsai
766116
766116
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
7
down vote
accepted
We can use mapply
and provide the functions as a list to convert the columns.
df <- as.data.frame(matrix(1:20, 5, 4))
df <- mapply(function(x, FUN) FUN(x),
df,
list(as.integer, as.numeric, as.character, as.factor),
SIMPLIFY = FALSE)
str(df)
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: num 6 7 8 9 10
# $ V3: chr "11" "12" "13" "14" ...
# $ V4: Factor w/ 5 levels "16","17","18",..: 1 2 3 4 5
So great! Thank you so much! Do you mind explaining why the functionas
cannot work on numeric and factor ?
– Darren Tsai
Nov 10 at 18:57
@DarrenTsai I am not familiar with the use ofas
function in this way. I hope others can help.
– www
Nov 10 at 18:58
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
7
down vote
accepted
We can use mapply
and provide the functions as a list to convert the columns.
df <- as.data.frame(matrix(1:20, 5, 4))
df <- mapply(function(x, FUN) FUN(x),
df,
list(as.integer, as.numeric, as.character, as.factor),
SIMPLIFY = FALSE)
str(df)
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: num 6 7 8 9 10
# $ V3: chr "11" "12" "13" "14" ...
# $ V4: Factor w/ 5 levels "16","17","18",..: 1 2 3 4 5
So great! Thank you so much! Do you mind explaining why the functionas
cannot work on numeric and factor ?
– Darren Tsai
Nov 10 at 18:57
@DarrenTsai I am not familiar with the use ofas
function in this way. I hope others can help.
– www
Nov 10 at 18:58
add a comment |
up vote
7
down vote
accepted
We can use mapply
and provide the functions as a list to convert the columns.
df <- as.data.frame(matrix(1:20, 5, 4))
df <- mapply(function(x, FUN) FUN(x),
df,
list(as.integer, as.numeric, as.character, as.factor),
SIMPLIFY = FALSE)
str(df)
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: num 6 7 8 9 10
# $ V3: chr "11" "12" "13" "14" ...
# $ V4: Factor w/ 5 levels "16","17","18",..: 1 2 3 4 5
So great! Thank you so much! Do you mind explaining why the functionas
cannot work on numeric and factor ?
– Darren Tsai
Nov 10 at 18:57
@DarrenTsai I am not familiar with the use ofas
function in this way. I hope others can help.
– www
Nov 10 at 18:58
add a comment |
up vote
7
down vote
accepted
up vote
7
down vote
accepted
We can use mapply
and provide the functions as a list to convert the columns.
df <- as.data.frame(matrix(1:20, 5, 4))
df <- mapply(function(x, FUN) FUN(x),
df,
list(as.integer, as.numeric, as.character, as.factor),
SIMPLIFY = FALSE)
str(df)
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: num 6 7 8 9 10
# $ V3: chr "11" "12" "13" "14" ...
# $ V4: Factor w/ 5 levels "16","17","18",..: 1 2 3 4 5
We can use mapply
and provide the functions as a list to convert the columns.
df <- as.data.frame(matrix(1:20, 5, 4))
df <- mapply(function(x, FUN) FUN(x),
df,
list(as.integer, as.numeric, as.character, as.factor),
SIMPLIFY = FALSE)
str(df)
# 'data.frame': 5 obs. of 4 variables:
# $ V1: int 1 2 3 4 5
# $ V2: num 6 7 8 9 10
# $ V3: chr "11" "12" "13" "14" ...
# $ V4: Factor w/ 5 levels "16","17","18",..: 1 2 3 4 5
answered Nov 10 at 18:43
www
25.3k102239
25.3k102239
So great! Thank you so much! Do you mind explaining why the functionas
cannot work on numeric and factor ?
– Darren Tsai
Nov 10 at 18:57
@DarrenTsai I am not familiar with the use ofas
function in this way. I hope others can help.
– www
Nov 10 at 18:58
add a comment |
So great! Thank you so much! Do you mind explaining why the functionas
cannot work on numeric and factor ?
– Darren Tsai
Nov 10 at 18:57
@DarrenTsai I am not familiar with the use ofas
function in this way. I hope others can help.
– www
Nov 10 at 18:58
So great! Thank you so much! Do you mind explaining why the function
as
cannot work on numeric and factor ?– Darren Tsai
Nov 10 at 18:57
So great! Thank you so much! Do you mind explaining why the function
as
cannot work on numeric and factor ?– Darren Tsai
Nov 10 at 18:57
@DarrenTsai I am not familiar with the use of
as
function in this way. I hope others can help.– www
Nov 10 at 18:58
@DarrenTsai I am not familiar with the use of
as
function in this way. I hope others can help.– www
Nov 10 at 18:58
add a comment |
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53242083%2fconvert-multiple-column-classes%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown