R - извлечение значений из других строк - PullRequest
0 голосов
/ 04 ноября 2019

Как следует из заголовка, я хотел бы извлечь значения из других строк.

В частности, в качестве примера рассмотрим следующий набор данных:

id.in.group <- c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3)
group <- c(1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4)
trial <- c(1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3)
subject <- c("s7","s11","s3","s6","s9","s4","s12","s10","s1","s8","s2","s5","s5","s9","s6","s10","s1","s3","s4","s7","s2","s8","s12","s11","s5","s3","s9","s12","s11","s10","s1","s6","s7","s4","s2","s8")

df <- data.frame(group, id.in.group, trial, subject)

df$other1.id <- 0
df$other2.id <- 0

df$other1.id <- ifelse(df$id.in.group == "1" , 2, df$other1.id)
df$other2.id <- ifelse(df$id.in.group == "1" , 3, df$other2.id)

df$other1.id <- ifelse(df$id.in.group == "2" , 1, df$other1.id)
df$other2.id <- ifelse(df$id.in.group == "2" , 3, df$other2.id)

df$other1.id <- ifelse(df$id.in.group == "3" , 1, df$other1.id)
df$other2.id <- ifelse(df$id.in.group == "3" , 2, df$other2.id)

View(df)

С учетом номера группы (df $ group) и идентификатора других в группе (df $ other1. id и df $ other2.id), я хотел бы создать две дополнительные переменные, показывающие для каждого испытания и каждого субъекта значение двух других предметов, а не их относительный id.in.group, чтобы получить следующие двастолбцы

df$other1.subject<-c("s11","s7","s7","s9","s6","s6","s10","s12","s12","s2","s8","s8","s9","s5","s5","s1","s10","s10","s7","s4","s4","s12","s8","s8", "s3","s5","s5","s11","s12","s12","s6","s1","s1","s2","s4","s4")
df$other2.subject<-c("s3","s3","s11","s4","s4","s9","s1","s1","s10","s5","s5","s2","s6","s6","s9","s3","s3","s1","s2","s2","s7","s11","s11","s12","s9","s9","s3","s10","s10","s11","s7","s7","s6","s8","s8","s2")

View(df)

Например, если trial = 1 и id.in.group = 1 (или, альтернативно, subject = s7), то other1.subject = s11, а other2.subject = s3. Я хотел бы извлечь такие значения для каждой id.in.group (или каждой темы) или для каждой строки.

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

Большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 04 ноября 2019

Вам нужно два раза присоединиться к df к себе - один для другого1, второй для других2:

library(dplyr)
df %>% 
  left_join(
    df %>% 
      select(group, trial, other1.id = id.in.group, other1.subject = subject),
    by = c("group", "trial", "other1.id")
  ) %>% 
  left_join(
    df %>% 
      select(group, trial, other2.id = id.in.group, other2.subject = subject),
    by = c("group", "trial", "other2.id")
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...