替换 dplyr R 中的循环
Replacing loop in dplyr R
所以我正在尝试使用没有循环的 dplyr 编写函数,但我不知道该怎么做
假设我们有电视台 (x,y,z) 和月份 (2,3)。如果我按这个分组,我们得到
此输出还带有汇总数值
TV months value
x 2 52
y 2 87
z 2 65
x 3 180
y 3 36
z 3 99
这是评估品牌。
然后我将有许多品牌需要过滤以仅获得价值 >=0.8* 评估品牌价值 & <=1.2* 评估品牌价值的品牌
因此,例如从下面开始,我只想过滤前两个,并且应该对所有月份和电视组合都这样做
brand TV MONTH value
sdg x 2 60
sdfg x 2 55
shs x 2 120
sdg x 2 11
sdga x 2 5000
正如@akrun 所说,您需要结合使用合并和子集。这是基本的 R 解决方案。
m <- merge(df, data, by.x=c("TV", "MONTH"), by.y=c("TV", "months"))
m[m$value.x >= m$value.y*0.8 & m$value.x <= m$value.y*1.2,][,-5]
# TV MONTH brand value.x
#1 x 2 sdg 60
#2 x 2 sdfg 55
数据
data <- structure(list(TV = structure(c(1L, 2L, 3L, 1L, 2L, 3L), .Label = c("x",
"y", "z"), class = "factor"), months = c(2L, 2L, 2L, 3L, 3L,
3L), value = c(52L, 87L, 65L, 180L, 36L, 99L)), .Names = c("TV",
"months", "value"), class = "data.frame", row.names = c(NA, -6L
))
df <- structure(list(brand = structure(c(2L, 1L, 4L, 2L, 3L), .Label = c("sdfg",
"sdg", "sdga", "shs"), class = "factor"), TV = structure(c(1L,
1L, 1L, 1L, 1L), .Label = "x", class = "factor"), MONTH = c(2L,
2L, 2L, 2L, 2L), value = c(60L, 55L, 120L, 11L, 5000L)), .Names = c("brand",
"TV", "MONTH", "value"), class = "data.frame", row.names = c(NA,
-5L))
所以我正在尝试使用没有循环的 dplyr 编写函数,但我不知道该怎么做
假设我们有电视台 (x,y,z) 和月份 (2,3)。如果我按这个分组,我们得到 此输出还带有汇总数值
TV months value
x 2 52
y 2 87
z 2 65
x 3 180
y 3 36
z 3 99
这是评估品牌。
然后我将有许多品牌需要过滤以仅获得价值 >=0.8* 评估品牌价值 & <=1.2* 评估品牌价值的品牌
因此,例如从下面开始,我只想过滤前两个,并且应该对所有月份和电视组合都这样做
brand TV MONTH value
sdg x 2 60
sdfg x 2 55
shs x 2 120
sdg x 2 11
sdga x 2 5000
正如@akrun 所说,您需要结合使用合并和子集。这是基本的 R 解决方案。
m <- merge(df, data, by.x=c("TV", "MONTH"), by.y=c("TV", "months"))
m[m$value.x >= m$value.y*0.8 & m$value.x <= m$value.y*1.2,][,-5]
# TV MONTH brand value.x
#1 x 2 sdg 60
#2 x 2 sdfg 55
数据
data <- structure(list(TV = structure(c(1L, 2L, 3L, 1L, 2L, 3L), .Label = c("x",
"y", "z"), class = "factor"), months = c(2L, 2L, 2L, 3L, 3L,
3L), value = c(52L, 87L, 65L, 180L, 36L, 99L)), .Names = c("TV",
"months", "value"), class = "data.frame", row.names = c(NA, -6L
))
df <- structure(list(brand = structure(c(2L, 1L, 4L, 2L, 3L), .Label = c("sdfg",
"sdg", "sdga", "shs"), class = "factor"), TV = structure(c(1L,
1L, 1L, 1L, 1L), .Label = "x", class = "factor"), MONTH = c(2L,
2L, 2L, 2L, 2L), value = c(60L, 55L, 120L, 11L, 5000L)), .Names = c("brand",
"TV", "MONTH", "value"), class = "data.frame", row.names = c(NA,
-5L))