Здравствуйте, у меня есть датафрейм, как показано ниже:
path.vec source.vec
1 apple Tuesday
2 lemon Monday
3 orange Wednesday
4c("apple", "lemon", "grape") c("Friday", "Monday", "Sunday")
5c("cheery", "lemon", "grape") c("Saturday", "Monday", "Sunday")
6c("apple", "lemon", "apple") c("Thursday", "Monday", "Sunday")
только 2 переменные: path.vec и source.vec. Оба собирают 2 разные тени одинаковых данных
Я хотел бы просто поменять местами элементы между списками с одинаковым индексом при выполнении условия.
Соотношение должно быть:
если df $ path.vec содержит «яблочный» своп с df $ source.vec с тем же элементом индекса
Я попробовал следующее:
df$path.vec <- ifelse(grepl("apple", df$path.vec), df$source.vec, df$path.vec)
но это меняет все элементы, когда есть хотя бы один элемент == "apple", а я хочу изменить только элемент "apple". Я думаю, что, вероятно, мне нужно сначала найти индексы, а потом основывать свой своп на индексе?
Я пробовал
ind <- which(df$path.vec %in% c("apple"))
но в моем реальном наборе данных это ошибка
Error in `$<-.data.frame`(`*tmp*`, path.index, value = 1:6) :
replacement has 6 rows, data has 33422
потому что он индексируется только тогда, когда яблоко является единственным элементом списка.
я тоже пробовал
df$path.index <- match("apple", df$path.vec)
но это приводит только к 1 каждой строке моего фрейма данных.
Это лучший способ подойти к этому?
В конце концов я хотел бы получить еще один столбец, как показано ниже:
path.final
1 Tuesday
2 lemon
3 orange
4c("Friday", "lemon", "grape")
5c("cheery", "lemon", "grape")
6c("Thursday", "lemon", "Sunday")
Приветствия