使用带有 lapply 的函数创建列并匹配值

using a function with lapply to create a column and match values

我有两个数据集 H 和 G。它们有一个名为 'diff' 的列,顾名思义,它包含每个数据集中两列之间的差异。我使用 lapply 来计算每个数据集的百分比(我的数据集比 H 和 G 多,所以想计算每个数据集中两列的百分比),但由于某种原因 lapply 给出然而,我的输出不会在通过它的数据集中创建 "perc" 列。我在这里做错了什么?

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
dsay<-list(H,G)
lapply(dsay,function(x)x$perc<-round((x$diff/x$X10)*100,1))

这个问题的扩展:

一旦我将百分比差异作为列使用:

  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)

我使用以下方法生成了一个图:

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" 列的相应差异值以及最低差异(这是最小值功能正在做)。我试过使用 "match" 是徒劳的。有人可以帮忙吗?

如果我们也需要将更改反映在数据框对象中,可以使用 list2envassign。但是,我会在 list 本身内进行所有计算。

list2env(lapply(mget(c('H','G')), function(x) 
  {x$perc<-round((x$diff/x$X10)*100,1);x}), envir=.GlobalEnv)