【问题标题】:Displaying corresponding value of a column by matching it to value of the second column通过将其与第二列的值匹配来显示列的相应值
【发布时间】:2015-02-16 04:33:34
【问题描述】:

生成如下两个数据集:

  H<-data.frame(replicate(10,sample(0:20,10,rep=TRUE)))  
  G<-data.frame(replicate(10,sample(0:20,10,rep=TRUE)))  
  H[c(2,3,7,9),9]<-NA
  G[c(1,5,7,8),9]<-NA
  H$diff<-H$X10-H$X9
  G$diff<-G$X10-G$X9
  H$perc<-round((H$diff/H$X10)*100,1)
  G$perc<-round((G$diff/G$X10)*100,1)

使用以下方法创建了一个情节:

library(lattice)
xyplot(X8+X9+X10~X1,H,type=c('p','l','g'),
col = c('yellow', 'green', 'blue','red'),
ylab='Count',layout=c(3, 1), 
xlab=paste("H",'difference',min(pmin(H$perc, na.rm = TRUE),na.rm=TRUE),
'% change count'))

我试图让代码显示“diff”列的相应差异值和 X2 列的值,以及最低差异(这是 min 函数正在执行的操作)。我试过使用“匹配”是徒劳的。有人可以帮忙吗?

【问题讨论】:

  • 不确定预期的结果。也许H$diff[which.min(H$perc)]
  • 谢谢,是的,这很好用。我已将其扩展为包含多个值。
  • 你说你需要最小的差异。您能否详细说明多个价值评论?
  • 我的意思是您的解决方案允许我显示与 H$perc 的最小值相对应的 H$diff。我还包括另一列 H$X2,它对应于 H$perc 的最小值。

标签: r match lattice


【解决方案1】:

你可以试试

ind <- which.min(H$perc)
label1 <- paste0("H difference ", H$diff[ind], "% change count")
label2 <- paste('X2 value', H$X2[ind])
xyplot(X8+X9+X10~X1,H,type=c('p','l','g'),
col = c('yellow', 'green', 'blue','red'),
ylab='Count',layout=c(3, 1), 
xlab=paste(label1, label2, sep=", "))

更新

如果你有多个数据集,创建一个函数

labelfn <- function(dat, Col1, Col2, diffCol){
  args <- as.list(match.call())[-1]
  e1 <- eval(args$Col1, dat)
  e2 <- eval(args$Col2, dat)
  e3 <- eval(args$diffCol, dat)
  ind <- which.min(e1)
  label1 <- paste0(deparse(args[[1]]), ' difference ', 
           e3[ind], '% change count')
  label2 <- paste(deparse(args[[3]]), ' value', e2[ind])
  paste(label1, label2, sep=", ")
 }

 labelfn(G, perc, X2, diff)
 #[1] "G difference -14% change count, X2  value 5"
  labelfn(H, perc, X2, diff)
 #[1] "H difference -2% change count, X2  value 18"

【讨论】:

  • 感谢 akrun,这就是我最终所做的,但我没有创建标签 1 和标签 2,而是将其放入 xlab= paste。无论哪种方式,如果数据发生变化,我将不得不以一种或另一种方式对标签等进行手动调整。我正在考虑扩展它的另一种方法是,因为我有超过 2 个数据集,并且每个数据集都有一个相似的图减去需要馈送到图的数据特定信息,我可以创建一个函数,尽管非常复杂,看起来生成绘图所需的关键列、名称、数据。
  • @oivemaria 为了更清晰,我创建了labels。创建一个函数会更容易。在这种情况下,您可能需要将 $ 更改为 [ 并相应地更改参数。
  • @oivemaria 更新了函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-13
  • 1970-01-01
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多