Я работаю с данными 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]
Я воссоздал ваши данные следующим образом:
df <- data.frame(
x = c(
"1:",
"3245 4",
"5443 2",
"2:",
"4346 4",
"2345 5"
),
stringsAsFactors = FALSE
)
Вот решение, использующее tidyverse, которое разбивает строковые компоненты и заполняет 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
Пожалуйста. Если это решило вашу проблему, пожалуйста, принимать ответ.
Вы можете опубликовать свои данные, используя
dput()
?