R Статистика пытается вызвать элемент из вектора с использованием элементов в другом кадре данных - PullRequest
0 голосов
/ 26 апреля 2018

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

X1 <- c(0,0,1,1,0)
X2 <- c(1,0,0,1,0)
X3 <- c(0,1,1,1,1)

lookup <- data.frame (X1, X2, X3) 
#This above here creates a data frame with 5 rows and 3 columns with binary answers.

Match <- 1:(15)
P1 <- rep(1:5, each=3)
X1 <- rep(1:3,length.out=15)
X1 <- paste("X", X1, sep="")
Data <- data.frame(Match, X1, P1) 
#This above creates a dataframe where it shows every possible match up of row and column for a total of 15 rows (5 people with 3 items).

Что я хочу сделать, это вытащить элемент из таблицы поиска в новый столбец, в котором показан результат сопоставления P1 и X1. Примерно так:

Data$Result <- lookup[1,'X3']

Вышеописанное работает так, как я хочу, но работает только для строк 1 и X3 (вопрос 3). Но когда я пытаюсь заменить эти вещи, чтобы изменить на строку, в зависимости от того, какие значения столбца, это просто беспорядок, возвращающий ноль или не результат вообще. Вот что я попробовал:

Data$Result <- lookup["P1","X1"] #this doesn't work
Data$Result <- lookup[Data$P1,Data$X1] #and this doesn't work
Data$Result <- lookup[P1,X1] #and this doesn't work

Я уверен, что есть очень простой ответ, и я просто очень глуп, было бы очень приятно, если бы кто-то мог помочь мне в этом.

1 Ответ

0 голосов
/ 26 апреля 2018

Я думаю, что вы ищете левое соединение. Смотрите предложение ниже.
Кроме того, небольшое слово для вашего именования переменных. Я бы рекомендовал использовать только маленькие буквы, без прописных букв, это облегчает кодирование. (например, data$match)

X1 <- c(0,0,1,1,0)
X2 <- c(1,0,0,1,0)
X3 <- c(0,1,1,1,1)
P1 <- as.integer(1:5)
lookup <- data.frame (P1, X1, X2, X3) #I have added this column because I think this is how your lookup is corresponding to your data

require(dplyr)
require(tidyr)

lookup_long <- gather(lookup, 'X' , 'answer', X1:X3) #making data tidy (one observation/variable per row)

left_join(Data, lookup_long, by = 'P1')

   Match X1 P1  X answer
1      1  0 P1 X1      0
2      1  0 P1 X2      1
3      1  0 P1 X3      0
4      2  0 P2 X1      0
5      2  0 P2 X2      0
6      2  0 P2 X3      1
7      3  1 P3 X1      1
8      3  1 P3 X2      0
9      3  1 P3 X3      1
10     4  1 P4 X1      1
11     4  1 P4 X2      1
12     4  1 P4 X3      1
13     5  0 P5 X1      0
14     5  0 P5 X2      0
15     5  0 P5 X3      1
16     6  0 P1 X1      0
17     6  0 P1 X2      1
18     6  0 P1 X3      0
19     7  0 P2 X1      0
20     7  0 P2 X2      0
21     7  0 P2 X3      1
22     8  1 P3 X1      1
23     8  1 P3 X2      0
24     8  1 P3 X3      1
25     9  1 P4 X1      1
26     9  1 P4 X2      1
27     9  1 P4 X3      1
28    10  0 P5 X1      0
29    10  0 P5 X2      0
30    10  0 P5 X3      1
31    11  0 P1 X1      0
32    11  0 P1 X2      1
33    11  0 P1 X3      0
34    12  0 P2 X1      0
35    12  0 P2 X2      0
36    12  0 P2 X3      1
37    13  1 P3 X1      1
38    13  1 P3 X2      0
39    13  1 P3 X3      1
40    14  1 P4 X1      1
41    14  1 P4 X2      1
42    14  1 P4 X3      1
43    15  0 P5 X1      0
44    15  0 P5 X2      0
45    15  0 P5 X3      1
...