#r #dplyr #lag #hmisc
#r #dplyr #задержка #hmisc
Вопрос:
Чтобы упростить, я хотел бы, чтобы столбец C был равен запаздыванию столбца B, при этом аргумент сдвига зависит от целых чисел в столбце A, поэтому я хочу:
A | B | C
0 | 5 | 5
2 | 6 | NA
3 | 7 | NA
2 | 8 | 6
Я попытался:
library(dplyr)
library(Hmisc)
data <- mutate(data,
C= Lag(B, shift=as.integer(A)),
но это не работает, я получаю только NAs, вероятно, это проблема типа, но
я не уверен, так как даже с as.integer это не работает, у
кого-нибудь есть идеи, почему это не работает?
Большое спасибо
Комментарии:
1. вы уверены, что ваш вывод правильный? Я думаю, что это должно быть
5, NA, NA, 6
Trydiag(sapply(df$A, function(i) lag(df$B, i)))
2. О да, я допустил ошибку, спасибо!
Ответ №1:
lag
from dplyr
также имеет аргумент shift, поэтому нет необходимости загружать другой пакет. Одним из способов сделать это было бы,
library(dplyr)
df$C <- diag(sapply(df$A, function(i) lag(df$B, i)))
df
# A B C
#1 0 5 5
#2 2 6 NA
#3 3 7 NA
#4 2 8 6
Комментарии:
1. Я получаю сообщение об ошибке «n должно быть единственным положительным целым числом», даже когда я добавляю as.integer перед тем, как я
2. есть ли у вас какие-либо отрицательные целые числа в
df$A
? Можете ли вы поделитьсяstr(data)
?3. Все это num, но да, у меня есть отрицательные целые числа в df $ A, причем отрицательные целые числа Lag (Hmisc) принимают прямые значения вместо значений до! И нули, похоже, тоже проблема, когда у меня нет отрицательных значений, но у меня есть нули, я получаю сообщение об ошибке: Ошибка в if (n == 0) return(x): пропущенное значение, где требуется TRUE / FALSE
4. Как вы хотите их обработать? Было бы нормально, если бы вы преобразовали отрицательные значения в положительные? (т. Е.
diag(sapply(abs(df$A), function(i) lag(df$B, i)))
Что касается 0, похоже, он работает в примере, которым вы поделились.5. Мне нужно принять прямые значения, чтобы я не мог преобразовать отрицательное значение в положительное, возможно, мне нужно найти что-то еще, кроме задержки
Ответ №2:
Решение: Аргумент shift, похоже, не принимает значения столбца в виде целых чисел, поэтому я сделал это по-другому:
df$C <- apply(as.data.frame(df$A), 1, function(i){
nth(df$B, i)
})
Он принимает n-е значение B, при этом n находится в столбце A
(Большое спасибо за помощь мне в Sotos)