Я изо всех сил пытаюсь понять, почему я не возвращаю правильные значения в свой кадр данных из своей функции. Я хочу пропустить вектор моего фрейма данных и создать новый столбец путем вычисления внутри элементов вектора. Вот что у меня есть:Функция Loop в R
# x will be the data frame's vector
y <- function(x){
new <- c()
for (i in x){
new <- c(new, x[i] - x[i+1])
}
return (new)
}
Итак, здесь я хочу создать новый вектор, который возвращает следующий элемент, вычитаемый из текущего элемента. Теперь, когда я применяю его к своему кадру данных
df$new <- lapply(df$I, y)
Я получаю все НС. Я знаю, что мне не хватает чего-то совершенно очевидного ...
Также как я могу выполнить функцию, которая сбрасывает себя, если df $ ID изменяется, поэтому я не вычитаю элементы из двух разных идентификаторов df $? Например, в моем кадре данных будет
ID I Order new
1001 5 1 1
1001 6 2 -2
1001 4 3 -2
1001 2 4 NA
1005 2 1 6
1005 8 2 0
1005 8 3 -2
1005 6 4 NA
Спасибо!
Не должно ли это 'for (i in x)' быть 'for (i in 1: length (x))'? – zx8754
ИМХО Ваша проблема: 'for (i in x)'; 'i' будет проходить через каждый элемент' x', но вы используете 'i' в качестве индекса. Попробуйте, например. 'для (i в seq (вдоль = x))'. Также вы должны подумать о предварительном распределении вашего вектора 'new'. BTW 'diff', как представляется, является той функцией, которую вы ищете. – sgibb
Я подозреваю, что вы не понимаете, что кадры данных являются списками, а x [i] будет целым столбцом, и поэтому вы вычитаете соседние столбцы. Вы также создадите классическую ошибку программирования, когда «i» находится в конце элементов списка, и вы попытаетесь получить «i + 1». –