【发布时间】:2022-01-01 13:23:14
【问题描述】:
我试图弄清楚如何在 R 数据框中创建一个新列,其值基于另一列中的值,但在不同的行中。我的数据如下:
player <- c('Tim Duncan', 'Lebron James', 'Kobe Bryant', 'Paul Pierce',
'Tim Duncan', 'Lebron James', 'Kobe Bryant', 'Paul Pierce',
'Tim Duncan', 'Lebron James', 'Kobe Bryant', 'Paul Pierce')
t <- c(3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1)
min_per_game <- c(30, 36, 34, 33, 31, 36, 34, 32, 29, 35, 32, 36)
pts_per_36_min <- c(19, 28, 27, 24, 22, 27, 25, 28, 23, 28, 29, 29)
df <- data.frame(player, t, min_per_game, pts_per_36_min)
我想要做的是创建一个名为“pts_per_game”的新列,它将查看数据帧中的每一行,检查“t”列中的值,然后在“t”中找到具有等效值的行player' 列,但 't' 列中的值比 1 小,然后使用 R 标识的行中的数据(特别是 min_per_game/36 * pts_per_36 min)填充新的“pts_per_game”列。
例如,在这个数据框的第一行中,'player' 列中的值是“Tim Duncan”,“t”列中的值是 3。我想让 R 看到那个,去找'player == "Tim Duncan" 和 t == 2 的行,从该行获取数据并执行 ((min_per_game/36)* pts_per_36 min),然后将结果值放入第一个数据帧行(其中玩家是Tim Duncan 和 t 是 3) 在名为“pts_per_game”的新列中。我希望它循环遍历整个数据帧并为每一行执行此操作,并理解这意味着具有最低可能值 t(在本例中为 1)的行将无法拥有“pts_per_game”为它们计算的值,因此应该收到 NA。谁能帮我弄清楚如何做到这一点?
【问题讨论】:
标签: r dataframe for-loop lapply sapply