Повторите значение в каждом ID - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть набор данных в формате R в длинном формате.Каждый идентификатор не появляется одинаковое количество раз (т. Е. Один идентификатор может быть одной строкой, другой - 79 строк).

например,

ID      V1       V2    
1       B        0    
1       A        1    
1       C        0   
2       C        0    
3       A        0    
3       C        0

Я хочу создать переменную, которая, если любая из строк для данного идентификатора имеет Var2 == 1, тогда 1 повторяется для каждой строки этого идентификатора

например

ID      V1       V2       V3    
1       B        0        1    
1       A        1        1    
1       C        0        1    
2       C        0        0    
3       A        0        0           
3       C        0        0

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

Вот решение tidyverse.

Если V2 может быть только 0 или 1:

library(dplyr)
df %>%
    group_by(ID) %>%
    mutate(V3 = max(V2))

Если вы хотите проверить, что V2 равно 1.

df %>%
    group_by(ID) %>%
    mutate(V3 = as.numeric(any(V2 == 1)))
0 голосов
/ 18 сентября 2018

Другой вариант base R

df$V3 <- with(df,  +(ID %in% which(rowsum(V2, ID) > 0)))
0 голосов
/ 17 сентября 2018

В base R мы можем использовать any - и ave для группировки.

DF$V3 <- with(DF, ave(V2, ID, FUN = function(x) any(x == 1)))
DF
#  ID V1 V2 V3
#1  1  B  0  1
#2  1  A  1  1
#3  1  C  0  1
#4  2  C  0  0
#5  3  A  0  0
#6  3  C  0  0

Данные

DF <- structure(list(ID = c(1L, 1L, 1L, 2L, 3L, 3L), V1 = c("B", "A", 
"C", "C", "A", "C"), V2 = c(0L, 1L, 0L, 0L, 0L, 0L)), .Names = c("ID", 
"V1", "V2"), class = "data.frame", row.names = c(NA, -6L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...