创建一个包含反映第三列中最大值的条件值的列

问题描述 投票:0回答:1

我正在尝试根据复杂的条件向数据框中添加一列,但我找不到任何与我想要做的事情完全匹配的帖子。 我有以下类型的数据,其中包含三个分类列(“试验”、“单词”、“点”)和一个连续列(“值”):

    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”。

一些帖子询问如何根据条件将最大值打印到新列中,而不是如何打印与最大值对应的分类标签。 我该怎么办? 如果我可以提供任何澄清,请告诉我,谢谢!

r rstudio
1个回答
0
投票
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]

	
© www.soinside.com 2019 - 2024. All rights reserved.