R 函数(x,y),x和y都会变化

R 函数(x,y),x和y都会变化,r,variables,count,apply,R,Variables,Count,Apply,我有一个数据框,由大约22个字段、一些系统ID和一些度量值组成,例如 bsystemid dcesystemid lengthdecimal heightquantity 2218 58 22 263 2219 58 22 197 2220 58 22 241 我想要的是: 一,。循环浏览

我有一个数据框,由大约22个字段、一些系统ID和一些度量值组成,例如

 bsystemid    dcesystemid  lengthdecimal  heightquantity  
 2218          58          22              263
 2219          58          22              197
 2220          58          22              241
我想要的是:

一,。循环浏览字段ID列表

二,。定义要测试条件的函数

三,。这样x和y都可以变化

y变量定义属于哪里,用于改变x和y?其他不同的结构

此代码块适用于单个字段和y值:

 varlist4<-names(brg) [c(6)]
 f1<-(function(x,y) count(brg[,x]<y) )
 lapply(varlist4, f1, y=c(7.5)) 
而上面的多个x,y代码块在第一种情况下会返回此值

      x freq
 1 FALSE 4828
 2  TRUE 4971
 3    NA   41
谢谢你的评论

更新:

我想要的是在满足某些条件的情况下,自动计算df中指定字段中值的出现次数。条件是数值常量或文本字符串,每个字段一个。例如,我可能想计算满足条件的发生次数,字段1中大于360,字段2中大于0,等等。因此,我允许x和y变化的意思是将带有字段名和相应条件的x和y向量读入循环结构中

我想自动化这个任务,因为它涉及大约30个表,每个表最多有50个左右的字段。我需要做两次,一次扫描超过最大值的值,一次扫描小于最小值的值。更好的方法是将条件加载到表中并在循环中引用该表。这可能是下一步,但我想先了解这篇文章

这是一个有效的例子

 t1<-18:29
 t2<-c(76.1,77,78.1,78.2,78.8,79.7,79.9,81.1,81.2,81.8,82.8,83.5)
 t3<-c(1.2,-0.2,-0.3,1.2, 2.2,0.4,0.6,0.4,-0.8,-0.1,5.0,3.1)
 t<-data.frame(v1=t1,v2=t2,v3=t3)
 varlist<-names(t) [c(1)]
 f1<-(function(x,y) count(t[,x]>y) )
 lapply(varlist, f1, y=c(27))
但如果我加入其他字段和相应的条件(y),我会得到与第一种情况不同的结果:

 varlist<-names(t) [c(1,2,3)]
 f1<-(function(x,y) count(t[,x]>y) )
 lapply(varlist, f1, y=c(27,83,3))


       x freq
 1 FALSE    8
 2  TRUE    4

 [[2]]
       x freq
 1 FALSE    1
 2  TRUE   11

 [[3]]
      x freq
 1 FALSE   11
 2  TRUE    1

varlist您可以使用
mapply
。让我们创建一些数据:

set.seed(123) # to get exactly the same results
brg = data.frame(x = rnorm(100), y=rnorm(100), z=rnorm(100))
brg$x[c(10, 15)] = NA  # some NAs
brg$y[c(12, 21)] = NA  # more NAs
然后你需要定义函数来完成这项工作。函数
.f1
统计数据,并确保始终有三个级别(真、假、NA)。然后,
f1
mapply
上下文中使用
.f1
,以便能够改变
x
y
。最后,对输出进行了一些改进(更改列的名称)

你应该得到

      x<0 y<1 z<1000
TRUE   46  87    100
FALSE  52  11      0
<NA>    2   2      0

<代码>席不能效法你。请生成一个工作示例。听起来您需要
mapply
?好的,我来回顾一下mapply。什么是函数“count”?您的工作示例有12行,这就是为什么您没有检测到代码中的错误。将示例增加到13行,您将看到警告。好的,我将回顾mapply。我在上面提供了一个工作示例和进一步的评论。我认为我的答案正是你想要的,或者我根本不了解你的问题。这很好,比我的方法要好得多。作品精美,适用于整个df。节省了我很多工作。@user2009447,很好。如果有效,你可以接受答案。
       x freq
 1 FALSE   10
 2  TRUE    2
 varlist<-names(t) [c(1,2,3)]
 f1<-(function(x,y) count(t[,x]>y) )
 lapply(varlist, f1, y=c(27,83,3))


       x freq
 1 FALSE    8
 2  TRUE    4

 [[2]]
       x freq
 1 FALSE    1
 2  TRUE   11

 [[3]]
      x freq
 1 FALSE   11
 2  TRUE    1
set.seed(123) # to get exactly the same results
brg = data.frame(x = rnorm(100), y=rnorm(100), z=rnorm(100))
brg$x[c(10, 15)] = NA  # some NAs
brg$y[c(12, 21)] = NA  # more NAs
f1 = function(x, y, data) {

  .f1 = function(x, y, data) {
    out = factor(data[, x] < y, 
                 levels=c("TRUE", "FALSE", NA), exclude=NULL)
    return(table(out))
  }

  out = mapply(.f1, x, y, MoreArgs = list(data = data)) # check ?mapply
  colnames(out) = paste0(x, "<", y) # more clear names for the output
  return(out)
}
varlist   = names(brg)
threshold = c(0, 1, 1000)

f1(x=varlist, y=threshold, data=brg)
      x<0 y<1 z<1000
TRUE   46  87    100
FALSE  52  11      0
<NA>    2   2      0