gpt4 book ai didi

r - 使用plyr匹配两个数据框中的列值

转载 作者:行者123 更新时间:2023-12-01 07:42:11 26 4
gpt4 key购买 nike

df

av  bv  tv   u   l value           s
30 120 360 330 210 6600 0.005238424
35 125 360 325 200 6875 0.005028887
40 130 360 320 190 7150 0.004835468
45 135 360 315 180 7425 0.004656377
50 140 360 310 170 7700 0.004490078
55 145 360 305 160 7975 0.004335247
60 150 360 300 150 8250 0.004190739
65 155 360 295 140 8525 0.004055554
70 160 360 290 130 8800 0.003928818
75 165 360 285 120 9075 0.003809763
80 170 360 280 110 9350 0.003697711

输出(df)
df<-structure(list(av = c(30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 
80), bv = c(120, 125, 130, 135, 140, 145, 150, 155, 160, 165,
170), tv = c(360, 360, 360, 360, 360, 360, 360, 360, 360, 360,
360), u = c(330, 325, 320, 315, 310, 305, 300, 295, 290, 285,
280), l = c(210, 200, 190, 180, 170, 160, 150, 140, 130, 120,
110), value = c(6600, 6875, 7150, 7425, 7700, 7975, 8250, 8525,
8800, 9075, 9350), s = c(0.005238424, 0.00502888704, 0.00483546830769231,
0.00465637688888889, 0.00449007771428572, 0.00433524744827586,
0.0041907392, 0.00405555406451613, 0.003928818, 0.00380976290909091,
0.00369771105882353)), .Names = c("av", "bv", "tv", "u", "l",
"value", "s"), row.names = c(1L, 13L, 25L, 37L, 49L, 61L, 73L,
85L, 97L, 109L, 121L), class = "data.frame")

df2
  av  bv  tv   u  l value
30 120 0 0 0 0
30 120 20 0 0 0
30 120 40 10 0 550
30 120 60 30 0 1650
30 120 120 90 0 4950
30 120 180 150 30 6600

输出(df2)
df2<-structure(list(av = c(30, 30, 30, 30, 30, 30), bv = c(120, 120, 
120, 120, 120, 120), tv = c(0, 20, 40, 60, 120, 180), u = c(0,
0, 10, 30, 90, 150), l = c(0, 0, 0, 0, 0, 30), value = c(0, 0,
550, 1650, 4950, 6600)), .Names = c("av", "bv", "tv", "u", "l",
"value"), row.names = c(1L, 2602L, 5203L, 7804L, 10405L, 13006L
), class = "data.frame")

我想要做的就是添加 df$s df 中的值至 df2哪里 df$bv == df2$bv . df2会有更多相同的 bv df 中的值,所以会有一些重复 s值。

我正在尝试以下
     newDF <- ddply(df2, .(bv,tv), summarise, s = df[df$bv %in% df2$bv,]$s)

虽然这对我不起作用,但可能是因为我不太了解这个函数中的变量参数。

在这一点上,所有其他列实际上都是任意的,但我想保持整个数据框完好无损。

最佳答案

这会将“df”中相应的“s”项拉入“df2”的匹配行中:

df2$s <- df$s[ match(df2$bv, df$bv)]
df2
#-----------------------
av bv tv u l value s
1 30 120 0 0 0 0 0.005238424
2602 30 120 20 0 0 0 0.005238424
5203 30 120 40 10 0 550 0.005238424
7804 30 120 60 30 0 1650 0.005238424
10405 30 120 120 90 0 4950 0.005238424
13006 30 120 180 150 30 6600 0.005238424

这将比 'subset()'-ting 和 'merge()'-ing 高效得多。哎呀。我没有看到plyr部分。它也将比任何 plyr 方法快得多,但那是因为我是一个 base-R 人。如果你想用 plyr 来做,那么这将提供我认为你所要求的:
> newDF <- ddply(df2, .(bv), summarise, s = df$s[match(df2$bv , df$bv)])
> newDF
bv s
1 120 0.005238424
2 120 0.005238424
3 120 0.005238424
4 120 0.005238424
5 120 0.005238424
6 120 0.005238424

关于r - 使用plyr匹配两个数据框中的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12307254/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com