Вычислить значение в третьем столбце на основе значений в других столбцах, но в разных строках - PullRequest
1 голос
/ 11 октября 2019

Извините, если это тривиальный вопрос или не имеет смысла, это мой первый пост. Я пришел из Excel, где я работал, если операторы и функции индекса соответствуют, и пытаюсь сделать что-то похожее в R, чтобы извлечь данные из двух столбцов, но не обязательно из одной строки, чтобы получить значение в третьем столбце, мой примерэто

df<-data.frame(ID=c(1,5,4,2,3),A=c(1,0,1,1,1),B=c(0,0,1,0,0))

желаемый результат: df <-data.frame (ID = c (1,5,4,2,3), A = c (1,0,1,1,1), B = c (0,0,1,0,0), C = c (0,0,0,0,1)) </p>

Я хочу создать третий столбец "C", которыйпо существу следует этому формату:

Ifelse(A[ID]=1 & B[ID+1]=1 , C[ID]=1 , C[ID]=0)

По существу, если A=1 в ID "x" и B=1 в ID "x + 1", то в новом столбце C в идентификаторе "x"= 1 в противном случае = 0. Я мог бы упорядочить все по идентификатору, если это облегчит задачу, но было бы идеально сделать это по столбцу идентификатора.

До сих пор я пробовал утверждения ifelse, но я думаю, что, вероятно, есть лучший способ сделать это

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Используя функцию отведения, я получил это для работы

df <- df [заказ (df $ ID),] </p>

df $ C <- ifelse (df $ A == 1& lead (df $ B) == 1, 1, 0) </p>

0 голосов
/ 11 октября 2019

Используя dplyr, мы можем использовать lead, чтобы получить следующий элемент после упорядочивания данных по ID.

library(dplyr)
df %>%
  arrange(ID) %>%
  mutate(C = as.integer(A == 1 & lead(B) == 1))

#  ID A B C
#1  1 1 0 0
#2  2 1 0 0
#3  3 1 0 1
#4  4 1 1 0
#5  5 0 0 0

В базе R мы можем сделать

df1 <- df[order(df$ID),]
df1$C <- with(df1, c(A[-nrow(df)] == 1 & tail(B, -1) == 1, 0))

Без упорядочивания данных мы, вероятно, можем сделать

transform(df, C = as.integer(A[ID] == 1 & B[match(ID + 1, ID)] == 1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...