【发布时间】:2016-11-23 07:24:39
【问题描述】:
我正在努力在自己的函数中使用dplyrfunctions。我更接近理解,但仍然没有完全理解。
这里我有 df 包含 type 和 D10 变量。
df <- data.frame(type = c("KL", "KL", "A", "A", "B", "B", "9999", "-1"),
D10 = rnorm(8, 3, 4))
我想写一个函数,如果type == "KL"; 则在新列中返回M; "-1" 如果是 type %in% c(9999, -1) 并且对于所有其他情况将返回 K。我希望9999, -1, KL 的值在函数启动时可以更改。
我的尝试以如下所示的功能结束:
klme <- function(dat, met, minusy = c(-1, 9999), Sortnr, type){
mutate_call <- lazyeval::interp(~ifelse(a %in% met, "M", ifelse(a %in% minusy, "-1", "K")), a = as.name(Sortnr))
dat %>% mutate_(.dots = setNames(list(mutate_call), type))
}
klme(df, c("KL"), minusy = c(-1, 9999), "Sortnr", "typ")
在typ 列中只返回K,而我想获得这样的输出:
type D10 type.1
1 KL -5.3210620 M
2 KL 4.4832414 M
3 A -5.3979886 K
4 A 2.7933964 K
5 B -0.9602293 K
6 B 4.5097305 K
7 9999 -3.9650796 -1
8 -1 5.2700609 -1
【问题讨论】:
-
链接不起作用,无论如何我想我读了它并完成了我提出的功能
-
你必须将
Sortnr = "type"传递给你的函数,否则你的结果将永远是K -
为什么不只使用
df$type.1 <- c('K','-1','M')[1 + (df$type %in% c('9999','-1')) + 2*(df$type == 'KL')]或嵌套ifelse:df$type.1 <- ifelse(df$type %in% c('9999','-1'), '-1', ifelse(df$type == 'KL', 'M', 'K'))? -
我想要一个函数,我可以将值
KL、MK更改为 exS、T等。我不想复制所有链并在新地方更改