Присвоить значение столбцу на основе списка индексов - PullRequest
0 голосов
/ 11 апреля 2019

Я работаю над данными Netflix из Kaggle и способом их форматирования, есть 1 строка с идентификатором фильма, за которой следуют строки идентификаторов клиентов и рейтингов для этого фильма. Таким образом, формат будет:

1:
3245 4
5443 2
2:
4346 4
2345 5

где строка только с 1 номером является идентификатором фильма, а следующие строки являются оценками клиентов для этого фильма. Я пытаюсь извлечь эти идентификаторы фильмов и просто создать еще один столбец в рейтинге клиентов, который будет содержать идентификатор фильма, но я не совсем уверен, как это сделать. Мне удалось создать список всех индексов, в которых появляется идентификатор фильма:

movie_title_index = which(is.na(df), arr.ind=TRUE)

Но у меня были проблемы с выяснением, как назначить элемент по этому индексу каждой строке после этого столбца. Вот что я смог придумать до сих пор, но это не работает:

df[rownames(df)>movie_title_index,]$movie_id = df$V1[movie_title_index]

1 Ответ

0 голосов
/ 11 апреля 2019

Я воссоздаю ваши данные следующим образом:

df <- data.frame(
  x = c(
    "1:",
    "3245 4",
    "5443 2",
    "2:",
    "4346 4",
    "2345 5"
  ),
  stringsAsFactors = FALSE
)

Вот решение с использованием тидиверса, который разбивает компоненты строки и заполняет MoveID вниз.

library(dplyr)
library(tidyr)
library(stringr)

df %>% 
  mutate(MoveID = str_extract(x,"^[[:digit:]](?=\\:)"),
         CustomedID = str_extract(x,"^[[:digit:]]+(?=\\s)"),
         Score = str_extract(x,"(?<=\\s)[[:digit:]]+$")) %>%
  fill(MoveID) %>%
  filter(complete.cases(.)) %>%
  select(-x)

#>
  MoveID CustomedID Score
1      1       3245     4
2      1       5443     2
3      2       4346     4
4      2       2345     5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...