添加依赖于另一列和子集的列(使用tidyverse)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了添加依赖于另一列和子集的列(使用tidyverse)相关的知识,希望对你有一定的参考价值。
我有以下股票数据数据集(作为tibble)
Open Volume Ticker
<dbl> <dbl> <chr>
1106. 10 AAL.L
1086. 30 AAL.L
1043. 9 ABF.L
1055. 2 ABF.L
1048. 90000 BT-A.L
1077. 8000 BT-A.L
使用dplyr包我想获得这个数据集,其中包含给定Ticker的平均音量。
Open Volume Ticker AvgVolume
<dbl> <dbl> <chr> <dbl>
1106. 10 AAL.L 20
1086. 30 AAL.L 20
1043. 9 ABF.L 5.5
1055. 2 ABF.L 5.5
1048. 90000 BT-A.L 49000
1077. 8000 BT-A.L 49000
我将这样做超过500000行,因此速度和效率是关键(没有循环等...)
我是Tidyverse的新手,并希望得到答案的解释。
答案
我们按'Ticker'分组,用mean
创建'AvgVolume'作为'Volume'的mutate
library(dplyr)
df1 %>%
group_by(Ticker) %>%
mutate(AvgVolume = mean(Volume))
# A tibble: 6 x 4
# Groups: Ticker [3]
# Open Volume Ticker AvgVolume
# <int> <int> <chr> <dbl>
#1 1106 10 AAL.L 20
#2 1086 30 AAL.L 20
#3 1043 9 ABF.L 5.5
#4 1055 2 ABF.L 5.5
#5 1048 90000 BT-A.L 49000
#6 1077 8000 BT-A.L 49000
另一答案
虽然你要求一个整齐的解决方案并且@akrun已经发布了一个,我将发布一个基本的R方式。
这是因为你的问题是适合ave
的教科书。
ave(df1$Volume, df1$Ticker)
#[1] 20.0 20.0 5.5 5.5 49000.0 49000.0
然后将此输出分配给新列。
df1$AvgVolume <- ave(df1$Volume, df1$Ticker)
df1
## A tibble: 6 x 4
# Open Volume Ticker AvgVolume
# <dbl> <int> <fct> <dbl>
#1 1106 10 AAL.L 20
#2 1086 30 AAL.L 20
#3 1043 9 ABF.L 5.5
#4 1055 2 ABF.L 5.5
#5 1048 90000 BT-A.L 49000
#6 1077 8000 BT-A.L 49000
数据。
df1 <-
structure(list(Open = c(1106, 1086, 1043, 1055, 1048, 1077),
Volume = c(10L, 30L, 9L, 2L, 90000L, 8000L), Ticker = structure(c(1L,
1L, 2L, 2L, 3L, 3L), .Label = c("AAL.L", "ABF.L", "BT-A.L"
), class = "factor"), AvgVolume = c(20, 20, 5.5, 5.5, 49000,
49000)), row.names = c(NA, -6L), class = c("tbl_df", "tbl",
"data.frame"))
以上是关于添加依赖于另一列和子集的列(使用tidyverse)的主要内容,如果未能解决你的问题,请参考以下文章
datagridviewcombobox columns 依赖于另一列
如何使一个材料表列的编辑模式字段类型依赖于另一列的值,而不影响其他行?