если ячейка равна ячейке ниже, выполнить действие в R - PullRequest
1 голос
/ 15 марта 2019

В RI я пытаюсь пройти через df, и если данные в столбце совпадают с данными в строке под ним, также сопоставьте данные из другого столбца.На самом деле, я не нашел ничего другого, кроме как рассмотреть цикл FOR, такой как ниже.Другие варианты - использовать оператор if, но я уверен, что есть лучший способ.

For (row in 1:nrow(df)){ insert code here maybe}

Пример моих данных ниже

id  name
1    M1
2    M1
3    M1
4    M2
5    M2

Я бы хотел, чтобы это выгляделокак это

id  name
1    M1
1    M1
1    M1
4    M2
4    M2

1 Ответ

2 голосов
/ 15 марта 2019

Мы группируем по 'name' и mutate в 'id', чтобы получить first элемент 'id'

library(dplyr)
df1 %>%
   group_by(name) %>%
   mutate(id = first(id))

Или data.table

library(data.table)
setDT(df1)[, id := first(id), by = name]

Или в base R

df1$id <- with(df1, ave(id, name, FUN = function(x) x[1]))

data

df1 <- structure(list(id = 1:5, name = c("M1", "M1", "M1", "M2", "M2"
  )), class = "data.frame", row.names = c(NA, -5L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...