我正在尝试根据复杂的条件向数据框中添加一列,但我找不到任何与我想要做的事情完全匹配的帖子。 我有以下类型的数据,其中包含三个分类列(“试验”、“单词”、“点”)和一个连续列(“值”):
trial word point value
1 trial1 word1 point1 337
2 trial1 word1 point2 105
3 trial1 word1 point3 289
4 trial1 word1 point4 190
5 trial1 word2 point1 167
6 trial1 word2 point2 223
7 trial1 word2 point3 384
8 trial1 word2 point4 143
9 trial2 word1 point1 179
10 trial2 word1 point2 101
11 trial2 word1 point3 122
12 trial2 word1 point4 213
13 trial2 word3 point1 409
14 trial2 word3 point2 221
15 trial2 word3 point3 582
16 trial2 word3 point4 178
我想知道的是,对于给定的
trial
,对于给定的word
,哪个point
对应于最高的value
? 然后我想将该 point
标签复制到新列中,对于该 word
的每一行。 这就是新列 (
max_point
) 的样子:
trial word point value max_point
1 trial1 word1 point1 337 point1
2 trial1 word1 point2 105 point1
3 trial1 word1 point3 289 point1
4 trial1 word1 point4 190 point1
5 trial1 word2 point1 167 point3
6 trial1 word2 point2 223 point3
7 trial1 word2 point3 384 point3
8 trial1 word2 point4 143 point3
9 trial2 word1 point1 179 point4
10 trial2 word1 point2 101 point4
11 trial2 word1 point3 122 point4
12 trial2 word1 point4 213 point4
13 trial2 word3 point1 409 point3
14 trial2 word3 point2 221 point3
15 trial2 word3 point3 582 point3
16 trial2 word3 point4 178 point3
重申一下,
max_point
表示在给定的point
中,哪个value
在给定的word
中具有最高的trial
。 例如,在 Trial1 word1(前 4 行)中,在 4 个点中,point1 具有最高值 (337),因此 max_point
对于该单词的 4 行中的每一行都有标签“point1”。
一些帖子询问如何根据条件将最大值打印到新列中,而不是如何打印与最大值对应的分类标签。 我该怎么办? 如果我可以提供任何澄清,请告诉我,谢谢!
data.table
:
library(data.table)
dt[,max_point := point[which.max(value)], .(trial, word)][]
#> trial word point value max_point
#> <char> <char> <char> <int> <char>
#> 1: trial1 word1 point1 337 point1
#> 2: trial1 word1 point2 105 point1
#> 3: trial1 word1 point3 289 point1
#> 4: trial1 word1 point4 190 point1
#> 5: trial1 word2 point1 167 point3
#> 6: trial1 word2 point2 223 point3
#> 7: trial1 word2 point3 384 point3
#> 8: trial1 word2 point4 143 point3
#> 9: trial2 word1 point1 179 point4
#> 10: trial2 word1 point2 101 point4
#> 11: trial2 word1 point3 122 point4
#> 12: trial2 word1 point4 213 point4
#> 13: trial2 word3 point1 409 point3
#> 14: trial2 word3 point2 221 point3
#> 15: trial2 word3 point3 582 point3
#> 16: trial2 word3 point4 178 point3
数据:
dt <- fread(input = "id trial word point value
1 trial1 word1 point1 337
2 trial1 word1 point2 105
3 trial1 word1 point3 289
4 trial1 word1 point4 190
5 trial1 word2 point1 167
6 trial1 word2 point2 223
7 trial1 word2 point3 384
8 trial1 word2 point4 143
9 trial2 word1 point1 179
10 trial2 word1 point2 101
11 trial2 word1 point3 122
12 trial2 word1 point4 213
13 trial2 word3 point1 409
14 trial2 word3 point2 221
15 trial2 word3 point3 582
16 trial2 word3 point4 178")[,id := NULL]