Любой способ добавить rownames к тибблу в R - PullRequest
1 голос
/ 11 июля 2020

Я безуспешно пытаюсь изменить rowname в tibble, выводимой функцией цикла map_dfr из пакета purrr ниже. Есть исправление?

foo <- function(x){
     total <- rbinom(1, x, .5)
     fixed <- total - 2
    random <- fixed + 3
   c(total = total, fixed = fixed, random = random)
}

m <- purrr::map_dfr(.x = c(6:9), .f = foo) # loop and output a tibble (a data.frame)
rownames(m) <- paste0("m", 1:4) # change the rownames
m

НО rownames не менять:

# A tibble: 4 x 3
  total fixed random
* <dbl> <dbl>  <dbl>
1     2     0      3
2     3     1      4
3     4     2      5
4     2     0      3

1 Ответ

1 голос
/ 11 июля 2020

Это tibble, и тиббл не может иметь настраиваемого имени строки. Можно преобразовать в data.frame, а затем присвоить имена строк

m <- as.data.frame(m)
rownames(m) <- paste0("m", 1:4)
m
#   total fixed random
#m1     3     1      4
#m2     5     3      6
#m3     2     0      3
#m4     5     3      6

Если мы хотим сохранить столбец для идентификации, в map также будет .id, которое будет включать либо имя list (если присутствует), либо последовательность list

purrr::map_dfr(.x = 6:9, .f = foo, .id = 'm')
purrr::map_dfr(.x = setNames(6:9, paste0("m", 1:4)), .f = foo, .id = 'm')
...