R数据帧通过行集合进行快速操作

R数据帧通过行集合进行快速操作,r,R,我在R中有一个数据帧,它的前几行如下所示: User_Name Product Score John 1 1.5 John 2 0.5 John 3 0.1 Tim 1 2 Tim 2 2 Tim 3

我在R中有一个数据帧,它的前几行如下所示:

User_Name       Product      Score
  John             1          1.5
  John             2          0.5
  John             3          0.1
  Tim              1          2
  Tim              2          2
  Tim              3          1
我要做的是,对于每个用户名,通过除以该用户的最大分数,“标准化”产品分数。也就是说,我会得到:

User_Name       Product      Score
      John             1          1
      John             2          0.333
      John             3          0.0667
      Tim              1          1
      Tim              2          1
      Tim              3          0.5
到目前为止,我已经使用for循环完成了这项工作,并为每个唯一用户对数据帧进行了子集设置,然后使用rbind()将所有结果附加到新的数据帧。然而,由于我的数据帧变得非常大,这似乎需要太长时间。我想知道是否有更快速的“R-way”:)来实现这一点


谢谢。

我们可以使用base R的
ave

df$Score1 <- with(df, Score/ave(Score, User_Name, FUN = max))

df
#  User_Name Product Score Score1
#1      John       1   1.5 1.0000
#2      John       2   0.5 0.3333
#3      John       3   0.1 0.0667
#4       Tim       1   2.0 1.0000
#5       Tim       2   2.0 1.0000
#6       Tim       3   1.0 0.5000
以及完整性
数据。表

library(data.table)
setDT(df)[, Score1 := Score/max(Score), by = User_Name]

我们可以使用基本R的
ave

df$Score1 <- with(df, Score/ave(Score, User_Name, FUN = max))

df
#  User_Name Product Score Score1
#1      John       1   1.5 1.0000
#2      John       2   0.5 0.3333
#3      John       3   0.1 0.0667
#4       Tim       1   2.0 1.0000
#5       Tim       2   2.0 1.0000
#6       Tim       3   1.0 0.5000
以及完整性
数据。表

library(data.table)
setDT(df)[, Score1 := Score/max(Score), by = User_Name]

使用
dplyr
df%>%groupby(用户名)%%>%mutate(Score=Score/max(Score))
谢谢!但是,出于好奇,有没有一个非dplyr的解决方案呢?肯定有一些东西是用于
max
的,但你可以使用它,用
max
替换
mean
,使用
dplyr
df%>%groupby(User\u Name)%%变异(Score=Score/max(Score))
谢谢!但是,出于好奇,有没有一种非dplyr解决方案呢?肯定在某个地方也有针对
max
的解决方案,但是你可以使用它,用
max
替换
mean