R统计尝试使用另一个数据帧中的元素从向量调用元素

时间:2018-04-26 18:05:49

标签: r data-manipulation

我可能非常担心这个问题而且我知道有一个非常简单的解决方案但是我对所有事情都很恐怖并且找不到它因为我很想找到这些东西的话我很抱歉提前做了什么无论如何,废话代码是我想要做的。

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行和第3行(问题3)。但是当我尝试根据列值替换那些要按行更改的东西时,它只是一个混乱,要么返回null,要么根本不返回结果。这是我试过的:

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 :(得分:0)

我认为你正在寻找左联盟。 见下面的建议 另外,你的变量命名的一个小词。我建议只使用小写字母,没有大写字母,使编码更容易。 (例如,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