我有两个这样的列表:
> output
[[1]]
A C freq
1 11 432 2
4 51 332 3
[[2]]
A B C freq
5 51 5 332 3
> k
[[1]]
[1] "A,C,freq"
[[2]]
[1] "A,B,C,freq"
第二个是第一个名字。
我想得到这个输出(由freq排序的字符向量):
> output2
[1] "A == 51 & B == 5 & C == 332 & freq == 3"
[2] "A == 51 & C == 332 & freq == 3"
[3] "A == 11 & C == 432 & freq == 2"
我尝试了以下内容:
> for (j in 1:length(output)){
+ t[[j]]=as.character(paste("output[[j]]",noquote(k[[j]]),sep=","))
+
+ }
> t
[1] "output[[j]],A,C,freq"
[2] "output[[j]],A,B,C,freq"
> tests <- function(data, ...){
+ colN <- c(...)
+ tmp <- get(data, envir = parent.frame())[colN]
+ Reduce(function(...) paste(..., sep=" & "),
+ Map(paste, names(tmp), tmp, MoreArgs = list(sep=" == ")))
+
+ }
> output2=list()
> for (j in 1:length(t)){
+ output2[[j]] <- lapply(strsplit(t, ","), function(x) tests(x[1],
+ x[-1]))}
我得到一个错误,因为最后一个循环无法识别t向量中的字符串。 如果我试试这个:
ll=output[[1]]
output3 <- c(sapply(strsplit("ll,A,C,freq", ","), function(x) tests(x[1],
+ x[-1])))
> output3
[1] "A == 11 & C == 432 & freq == 2"
[2] "A == 51 & C == 332 & freq == 3"
它运行良好(尽管它不是由freq排序的),但我可以有大的列表,这就是为什么我做了一个循环。
如果有人可以帮我解决这个问题,我将不胜感激。
答案 0 :(得分:1)
我可能会遗漏一些东西。 k
如何进入图片?
如果我理解正确,您可以创建&#34;文字&#34;第一列,rbind all all by freq
按降序排列如下:
outls <- lapply(output, function(x) {
x$Text <- Reduce(function(...) paste(..., sep=" & "),
Map(paste, names(x), x, MoreArgs = list(sep=" == ")))
x
})
out <- plyr::rbind.fill(outls)
out[order(-out$freq), "Text"]
数据:
output <- list(
data.frame(A=c(11, 51), C=c(432, 332), freq=c(2,3)),
data.frame(A=51, B=5, C=332, freq=3))