我已经坚持了一段时间了,我希望这个描述不会太混乱。基本上,我有一个由三列组成的数据框:参与者,时间和响应,每个参与者被要求做出两个响应,每个时间点一个。以下是插图:
> df[,c("participant", "time", "response")]
participant time response
1 1 3 18
2 1 4 17
3 4 3 15
4 4 4 10
5 7 3 5
6 7 4 0
7 10 3 10
8 10 4 10
9 13 3 0
10 13 4 10
11 16 3 15
12 16 4 5
13 19 3 5
14 19 4 5
15 22 3 25
16 22 4 15
17 25 3 13
18 25 4 0
19 28 3 0
20 28 4 0
21 31 3 25
22 31 4 18
23 34 3 15
24 34 4 15
25 37 3 1
26 37 4 4
27 40 3 5
28 40 4 5
29 43 3 5
30 43 4 15
31 46 3 5
32 46 4 12
33 49 3 15
34 49 4 0
35 52 3 3
36 52 4 12
37 55 3 20
38 55 4 0
39 58 3 5
40 58 4 5
41 61 3 13
42 61 4 10
43 64 3 10
44 64 4 10
45 67 3 3
46 67 4 15
47 70 3 13
48 70 4 20
49 73 3 12
50 73 4 60
51 76 3 10
52 76 4 10
53 79 3 2
54 79 4 0
55 82 3 5
56 82 4 10
57 85 3 8
58 85 4 4
59 88 3 0
60 88 4 15
61 91 3 5
62 91 4 5
63 94 3 15
64 94 4 5
65 97 3 0
66 97 4 5
67 100 3 2
68 100 4 8
69 103 3 5
70 103 4 5
71 106 3 5
72 106 4 5
73 109 3 9
74 109 4 9
75 112 3 3
76 112 4 7
77 115 3 20
78 115 4 25
79 118 3 5
80 118 4 4
81 121 3 10
82 121 4 10
83 124 3 2
84 124 4 4
85 127 3 5
86 127 4 5
87 130 3 18
88 130 4 8
89 133 3 0
90 133 4 10
91 139 3 5
92 139 4 5
93 142 3 7
94 142 4 12
95 145 3 5
96 145 4 13
97 148 3 26
98 148 4 20
99 151 3 13
100 151 4 21
101 154 3 5
102 154 4 15
103 157 3 10
104 157 4 10
105 160 3 5
106 160 4 15
107 163 3 5
108 163 4 15
109 166 3 0
110 166 4 1
111 169 3 13
112 169 4 21
113 172 3 25
114 172 4 25
115 175 3 5
116 175 4 14
117 178 3 5
118 178 4 15
119 181 3 10
120 181 4 0
121 184 3 5
122 184 4 15
123 190 3 3
124 190 4 4
125 193 3 5
126 193 4 15
127 196 3 15
128 196 4 5
129 199 3 25
130 199 4 25
131 202 3 5
132 202 4 15
133 205 3 0
134 205 4 2
135 208 3 13
136 208 4 22
137 211 3 2
138 211 4 10
139 214 3 3
140 214 4 3
141 217 3 15
142 217 4 11
143 220 3 0
144 220 4 2
145 223 3 40
146 223 4 35
147 226 3 24
148 226 4 24
149 229 3 5
150 229 4 5
151 232 3 10
152 232 4 5
153 235 3 16
154 235 4 0
155 238 3 17
156 238 4 19
157 241 3 20
158 241 4 5
159 244 3 5
160 244 4 5
161 247 3 0
162 247 4 15
163 250 3 3
164 250 4 13
165 253 3 20
166 253 4 4
167 256 3 5
168 256 4 5
169 259 3 3
170 259 4 19
171 262 3 25
172 262 4 25
173 265 3 0
174 265 4 15
175 268 3 5
176 268 4 3
177 271 3 22
178 271 4 22
179 274 3 25
180 274 4 5
181 277 3 15
182 277 4 15
183 280 3 5
184 280 4 15
185 283 3 17
186 283 4 9
187 286 3 5
188 286 4 5
189 289 3 15
190 289 4 10
对于每个参与者,我想比较他们的时间3响应和他们的时间4响应,以便将匹配值计算到cumsum频率表上的特定值。以下是示例,而非实际输出:
0 3
1 5
2 7
3 9
4 11
5 12
,其中第一列是值本身,第二列是在两个时间点期间选择相同响应的参与者的累积频率(例如,3个参与者选择两个时间点的响应为0,选择了5个参与者响应< = 1,7,参与者选择响应< = 2等。)
非常感谢任何提示。
答案 0 :(得分:2)
如果您对频率目的的总和感兴趣,而不是中间运行总和,则以下内容可能有所帮助。鉴于以下数据:
A <- '18 17 15 10 5 0 10 10 0 10 15 5 5 5 25 15 13 0 0 0 25 18 15 15 1 4 5 5 5 15 5 12 15 0 3 12 20 0 5 5 13 10 10 10 3 15 13 20 12 60 10 10 2 0 5 10 8 4 0 15 5 5 15 5 0 5 2 8 5 5 5 5 9 9 3 7 20 25 5 4 10 10 2 4 5 5 18 8 0 10 5 5 7 12 5 13 26 20 13 21 5 15 10 10 5 15 5 15 0 1 13 21 25 25 5 14 5 15 10 0 5 15 3 4 5 15 15 5 25 25 5 15 0 2 13 22 2 10 3 3 15 11 0 2 40 35 24 24 5 5 10 5 16 0 17 19 20 5 5 5 0 15 3 13 20 4 5 5 3 19 25 25 0 15 5 3 22 22 25 5 15 15 5 15 17 9 5 5 15 10'
B <- as.vector(as.matrix((read.table(text = A, colClasses = 'numeric'))))
Z1 <- rep(c(TRUE, FALSE), 190/2)
RawData <- data.frame(seq_len(95), B[Z1], B[!Z1])
names(RawData) = c('Participant', 'Time1', 'Time2')
dplyr
库可以像这样使用:
library(dplyr)
RD <- tbl_df(RawData)
Freq <- RD %>% mutate(Match = Time1 == Time2) %>% filter(Match == TRUE) %>% group_by(Time1) %>% summarise(n())
结果是
Time1 n()
1 0 1
2 3 1
3 5 12
4 9 1
5 10 5
6 15 2
7 22 1
8 24 1
9 25 3
答案 1 :(得分:1)
这是一个使用基本函数的更长的步骤,也许你想使用中间对象进一步使用:
假设mydf对象是包含所有数据的data.frame:
> head(mydf)
participant time response
1 1 1 18
2 1 2 17
3 2 1 15
4 2 2 10
5 3 1 5
6 3 2 0
使用aggregate函数比较同一参与者的值:
> mydf <- aggregate(response ~ participant, data = mydf, function(x){
if (x[1] == x[2]){
x[1]
} else {
NA
}
})
忽视不平等的参与者:
> mydf <- mydf[complete.cases(mydf), ]
并对数据框进行排序:
> mydf <- mydf[order(mydf$response), ]
现在,您可以创建一个表并将其用于不同目的:
> mytable <- table(mydf$response)
> cumsum(mytable)
0 3 5 9 10 15 22 24 25
1 2 14 15 20 22 23 24 27