【发布时间】:2021-10-07 02:21:41
【问题描述】:
我有一个这样的数据框
id <- c(5738180,51845,167774,517814,1344920,517833,51844)
measurement <- c("Length","Breadth","Breadth","Length","Length","Length","Breadth")
map_flag <- c(0,1,1,0,0,0,0)
cap_flag <- c(1,0,0,1,1,0,0)
df.sample <- data.frame(id,measurement,map_flag,cap_flag)
df.sample
id measurement map_flag cap_flag
5738180 Length 0 1
51845 Breadth 1 0
167774 Breadth 1 0
517814 Length 0 1
1344920 Length 0 1
517833 Length 0 0
51844 Breadth 0 0
我正在尝试创建一个函数,该函数将df 和type 作为输入并根据过滤后的type 返回df
如果我进来
-
type = "map",它应该使用map_flag = 1列过滤df并返回一个df -
type = "cap",它应该使用cap_flag = 1列过滤df并返回一个df -
type = "Length",它应该使用measurement = Length列过滤df并返回一个df
期望的输出
type = "地图"
id measurement map_flag cap_flag
51845 Breadth 1 0
167774 Breadth 1 0
type = "cap"
id measurement map_flag cap_flag
5738180 Length 0 1
517814 Length 0 1
1344920 Length 0 1
type = "长度"
id measurement map_flag cap_flag
5738180 Length 0 1
517814 Length 0 1
1344920 Length 0 1
517833 Length 0 0
我正在尝试这样做,但没有得到我想要的
testFun <- function (df, type) {
df <- df %>%
{if (type==starts_with(map) filter(map_flag==1) }
return(df)
}
如果有人能指出我正确的方向,我将不胜感激。
【问题讨论】:
-
逻辑我不清楚。对于
type == 'map',它选择相应的列(map_flag)并过滤值= 1的行。type == 'cap'也是如此,但type = 'Length'不遵循该逻辑。你确定它必须包含在同一个函数中吗? -
@RonakShah 我明白你的意思,但我正在使用的逻辑是故意这样设置的。 2 列是标志,1 列是非标志。
-
那么你想怎么实现这个功能呢?你怎么知道哪些输入是标志,哪些是非标志。如果只有 3 个输入,您要对过滤器进行硬编码吗?就像@Park 的回答一样?
-
@RonakShah 是的,Park 的回答效果很好,但我想看看我们是否可以通过不对过滤器进行硬编码来做到这一点。我会欢迎你的建议。