Заменить все вхождения - PullRequest
       7

Заменить все вхождения

1 голос
/ 16 апреля 2020

У меня есть нижеприведенный фрейм данных

x=c(1:21)
y=c(rep(0,2),rep(3,7),rep(1,12))
z=c(rep(1,17),rep(3,4))
table=data.table(x,y,z)

. В этом мне нужно заменить все 3 в столбце y значением y, где значение z равно 3 (в данном случае это 1).

table[, N := .N, rleid(y)]
table[, y := replace(y, N ==1, NA)]
table[N==1, y := zoo::na.locf(y)][, N := NULL]

Я пытался с этим, но этот заменяет только один случай, не все. Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Мы можем использовать fifelse от data.table

library(data.table)
table[, y := fifelse(y == 3, y[z==3][1], y)]
0 голосов
/ 16 апреля 2020

Мы можем replace все y значения, где y равно 3, с первым появлением y значения, где z равно 3.

library(data.table)
table[, y := replace(y, y == 3, y[z==3][1])]
#Or similarly,
#table[, y := replace(y, y == 3, y[which.max(z==3)])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...