I have a data frame named AE
, typically I set the row names to NULL to allow an rbind
. In this cases when I do that, the row.names are still "1","2", and do not allow a bind. I am not understanding what is different about this data.frame.
#load Data
AE <- structure(list(mean = c(0.363510076570372, 0.636489923429628),
SE = c(0.00728114835455055, 0.00728114835455055), grp = c("D",
"DP"), level = c("fair or poor health",
"good or better health"), counts = structure(list(counts = c(25405L,
25405L)), row.names = c("counts", "counts1"), class = "data.frame")), row.names = c(NA,
-2L), class = "data.frame")
#remove rownames
rownames( AE ) <- NULL
#this is the line i want to work
rbind( AE, AE)
CodePudding user response:
The main reason is that one of the column is a data.frame
.
> str(AE)
'data.frame': 2 obs. of 5 variables:
$ mean : num 0.364 0.636
$ SE : num 0.00728 0.00728
$ grp : chr "D" "DP"
$ level : chr "fair or poor health" "good or better health"
$ counts:'data.frame': 2 obs. of 1 variable: ###
..$ counts: int 25405 25405
We may need to convert it to a regular column
AE <- do.call(data.frame, AE)
out <- rbind(AE, AE)
row.names(out) <- NULL
> out
mean SE grp level counts
1 0.3635101 0.007281148 D fair or poor health 25405
2 0.6364899 0.007281148 DP good or better health 25405
3 0.3635101 0.007281148 D fair or poor health 25405
4 0.6364899 0.007281148 DP good or better health 25405
Or using tidyverse
, unpack
to convert to a regular column and then use bind_rows
library(tidyr)
library(dplyr)
unpack(AE, counts) %>%
bind_rows(., .)
# A tibble: 4 × 5
mean SE grp level counts
<dbl> <dbl> <chr> <chr> <int>
1 0.364 0.00728 D fair or poor health 25405
2 0.636 0.00728 DP good or better health 25405
3 0.364 0.00728 D fair or poor health 25405
4 0.636 0.00728 DP good or better health 25405