2016-10-05 9 views
0

Чтобы сделать его простым, я хотел бы, чтобы столбец C был равен . Задержка столбца B с аргументом сдвига в зависимости от целых чисел в столбец A, так что я хочу:Lag (Hmisc) с аргументом сдвига, определенным в другом столбце. R

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 он не работает, сом у кого-нибудь есть идея, почему это не работает?

Большое спасибо

+0

вы уверены, что ваш вывод является правильным? Я думаю, что это должно быть '5, NA, NA, 6' Try' diag (sapply (df $ A, function (i) lag (df $ B, i))) – Sotos

+0

О да, я ошибся, спасибо! – MCmr

ответ

0

lag из dplyr также имеет сдвиг аргумента, поэтому нет необходимости загружать другой пакет. Один из способов сделать это было бы,

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 
+0

Я получаю ошибку «n должно быть единственным положительным целым числом», даже когда я добавляю as.integer до i – MCmr

+0

у вас есть отрицательные целые числа в 'df $ A'? Можете ли вы поделиться «str (data)»? – Sotos

+0

Все это число, но да, у меня есть отрицательные целые числа в df $ A, с отрицательными целыми числами Lag (Hmisc) принимают значения вперед, а не значения до! И нули, кажется, тоже проблема, когда у меня нет отрицательных значений, но у меня есть нули, я получаю ошибку: Ошибка в if (n == 0) return (x): отсутствует значение, где требуется TRUE/FALSE – MCmr

0

Решение: Сдвиг аргумент не кажется, взять значения столбцов в виде целых чисел, , так что я сделал это по-другому:

df$C <- apply(as.data.frame(df$A), 1, function(i){ 
    nth(df$B, i) 
}) 

Он принимает п-я величина в, с п, находясь в седловине

(Большое спасибо за помощь мне SOTOS)

 Смежные вопросы

  • Нет связанных вопросов^_^