我正在处理虹膜数据集,并按如下操作以获取种类,特征1,特征2,值数据框:
gatherpairs <- function(data, ...,
xkey = '.xkey', xvalue = '.xvalue',
ykey = '.ykey', yvalue = '.yvalue',
na.rm = FALSE, convert = FALSE, factor_key = FALSE) {
vars <- quos(...)
xkey <- enquo(xkey)
xvalue <- enquo(xvalue)
ykey <- enquo(ykey)
yvalue <- enquo(yvalue)
data %>% {
cbind(gather(., key = !!xkey, value = !!xvalue, !!!vars,
na.rm = na.rm, convert = convert, factor_key = factor_key),
select(., !!!vars))
} %>% gather(., key = !!ykey, value = !!yvalue, !!!vars,
na.rm = na.rm, convert = convert, factor_key = factor_key)%>%
filter(!(.xkey == .ykey)) %>%
mutate(var = apply(.[, c(".xkey", ".ykey")], 1, function(x) paste(sort(x), collapse = ""))) %>%
arrange(var)
}
test = iris %>%
gatherpairs(sapply(colnames(iris[, -ncol(iris)]), eval))
这取自https://stackoverflow.com/a/47731111/8315659
这是为我提供了具有Feature1和Feature2所有组合的数据框,但是我想删除重复的内容,只是显示了相反的内容。例如,“花瓣长度”与“花瓣宽度”与“花瓣宽度”与“花瓣长度”相同。但是,如果有两行具有相同的Petal.Length与Petal.Width值,那么我不想删除该行。因此,我只想删除所有值都相同的行,只是将.xkey和.ykey取反。本质上,这只是为了重新创建上面链接的答案中所示的ggplot矩阵的底部三角形。
这怎么办? 杰克
答案 0 :(得分:0)
我认为可以使用执行单个收集操作的源代码的第一部分来完成。以iris
为例,这将产生600行输出,iris
中150行x 4列中的每一个输出。
gatherpairs <- function(data, ...,
xkey = '.xkey', xvalue = '.xvalue',
ykey = '.ykey', yvalue = '.yvalue',
na.rm = FALSE, convert = FALSE, factor_key = FALSE) {
vars <- quos(...)
xkey <- enquo(xkey)
xvalue <- enquo(xvalue)
ykey <- enquo(ykey)
yvalue <- enquo(yvalue)
data %>% {
cbind(gather(., key = !!xkey, value = !!xvalue, !!!vars,
na.rm = na.rm, convert = convert, factor_key = factor_key),
select(., !!!vars))
} # %>% gather(., key = !!ykey, value = !!yvalue, !!!vars,
# na.rm = na.rm, convert = convert, factor_key = factor_key)%>%
# filter(!(.xkey == .ykey)) %>%
# mutate(var = apply(.[, c(".xkey", ".ykey")], 1, function(x) paste(sort(x), collapse = ""))) %>%
# arrange(var)
}