конвертировать df $ ve c в числовые - PullRequest
1 голос
/ 12 апреля 2020

Я пытаюсь написать функцию для моих многочисленных наборов данных, и использование a$Rural в моем случае нецелесообразно, и я пытаюсь получить числовую c векторную базу на a

df <- data.frame(
  "Values" = c("Gender","Gender","Marital Status","Marital Status","Age","Age"),
  "Mean"= c(0.6934877,  0.8536885,  0.8801737,  0.8998975, 54.6858177, 54.1486680),
  "By"= c("Urban", "Rural", "Urban","Rural","Urban", "Rural")) 

a <- df %>% 
     spread(By, Mean)%>%
     dplyr::group_by(Values) 

Я устал от этого, но потерпел неудачу

c <- as.integer(as.character(a[2]));c

Ожидаемые результаты - [1] 54.1486680 0.8536885 0.8998975, но без использования (c <- a$Rural; c ) имени столбца, другими словами, как я могу присвоить a[2] в качестве числа большое спасибо

1 Ответ

1 голос
/ 12 апреля 2020

a[2] по-прежнему data.frame с одним столбцом. Это уже числовой столбец c. Таким образом, нет необходимости в преобразовании

str(a[2])
#tibble [3 × 1] (S3: tbl_df/tbl/data.frame)
# $ Rural: num [1:3] 54.149 0.854 0.9

. Поскольку это tibble, [,2] также не будет работать. Один из вариантов: [[ или $

str(a[[2]])
#num [1:3] 54.149 0.854 0.9


as.integer(as.character(a[[2]]))

Или другой вариант $ с именами столбцов. Поскольку в ОП упоминалось, что это нежизнеспособный вариант (с индексированием $ невозможно)

a$Rural

Или в tidyverse мы можем использовать pluck из purrr

library(purrr)
a %>% 
    pluck(2)
 #[1] 54.1486680  0.8536885  0.8998975

Или, если нам нужно использовать только цифры c index

a %>%
   pull(2)
#[1] 54.1486680  0.8536885  0.8998975
...