Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从列表中创建data.frame变量_R - Fatal编程技术网

从列表中创建data.frame变量

从列表中创建data.frame变量,r,R,是否可以“通过引用”为对象创建和指定名称? 例如,我有一个大的data.frame,我需要对其中的一些列执行一些基本操作。我将需要执行的列、分组和操作放在列表中: exec_group_list = c("nbhd", "state", "use") exec_var_list = c("land", "imp", "assmt", "landp", "impp", "assmtp") exec_func_list = c("sum", "mean", "median", "max", "

是否可以“通过引用”为对象创建和指定名称? 例如,我有一个大的data.frame,我需要对其中的一些列执行一些基本操作。我将需要执行的列、分组和操作放在列表中:

exec_group_list = c("nbhd", "state", "use")
exec_var_list   = c("land", "imp", "assmt", "landp", "impp", "assmtp")
exec_func_list  = c("sum", "mean", "median", "max", "min", "sd")
因此,“土地”栏将按“nbhd”分组,然后将“总和”、“平均值”、“中值”等应用于该栏。然后对“imp”列执行同样的操作,以此类推。然后我将重复相同的步骤,但这次分组将按“状态”完成。。。冲洗、车削并重复,如下所示:

for (eachg in exec_group_list){
  group_by_field = eachg
  group_by = eval(parse(text=paste("sales$",group_by_field)))
  group_by_lst = list(group_by)
  print(paste("Grouping by:", eachg))
  #CREATE DATA.FRAME FOR GROUP HERE
    for (eachv in exec_var_list){
      var = eval(parse(text=paste("sales$",eachv)))
      print(paste("On column:", eachv))
      for (eachf in exec_func_list){
    print(paste("Calculating:", eachf))
    tempt = (aggregate(var, group_by_lst, eachf))
    colnames(tempt) = c(eachg, paste(eachv,".",eachf, sep=""))
    print(tempt)
    #APPEND COLUMNS TO GROUP DATA.FRAME
      }
    }
  }
我通过eval()了解了如何使用列表中的引用,这样我就可以循环遍历分组列表和列列表,并使用列表中的值执行相同的操作

但是我想将信息存储在以分组字段命名的data.frame中。例如,如果我按“nbhd”分组,我想创建一个名为“by_nbhd”的空data.frame

我尝试了类似于
eval(parse(text=paste(“by”,“nbhd”,“sep=”“))))=data.frame(“nbhd”=NA)
的方法,但出现了一个错误

有人知道这是否可能吗?任何帮助都将不胜感激。提前谢谢。

与其要求“通过引用创建对象”,因为“通过值调用”与“通过引用调用”之间存在着各种无关的认知联系,不如要求“通过语言进行计算”。假设您有一个数据集(您没有很好地描述),其中包含一组名为“nbhd”、“state”和“use”的列,以及名为“land”、“imp”、“assmt”、“landp”、“impp”、“assmtp”的列。您希望在第二组的数字列上连续检查第一组的6个类别中的6种汇总统计信息(3 x 6 x 6表格)

编写一个函数原型,为特定函数、特定数值列和特定分类列提供一个汇总表

 tabfn <- function(dfrm, numcol, catcol, fn){
                         tapply(dfrm[[numcol]], dfrm[[catcol]], fn) }
不幸的是,这大部分是未经测试的猜测,因为您没有生成一个最小的可复制示例。

与其要求“通过引用创建一个对象”,这会带来各种无关的认知关联,区分“通过值调用”与“通过引用调用”,不如在以下方面寻求帮助大概您有一个数据集(您没有很好地描述),其中包含一组名为“nbhd”、“state”和“use”的列,以及名为“land”、“imp”、“assmt”、“landp”、“impp”、“assmtp”的列。您要在第二个组(3 x 6 x 6表格)的数字列上连续检查第一个组的6个类别内的6个排序的摘要统计信息

编写一个函数原型,为特定函数、特定数值列和特定分类列提供一个汇总表

 tabfn <- function(dfrm, numcol, catcol, fn){
                         tapply(dfrm[[numcol]], dfrm[[catcol]], fn) }

不幸的是,这大部分是未经测试的猜测,因为您没有生成一个最小的可复制示例。

使用package
data.table
代替。使用带有多个参数的
map
mapply
。谢谢。我将查找这些参数。我使用assign()创建了data.frames如图所示,您确实走错了R的道路。您不应该创建多个命名数据帧,而应该创建一个包含多列的数据帧。请描述您的文件结构,并使用
read.table
获取帮助。请改用package
data.table
。使用
map
mappy
,这需要多个参数。谢谢。我将查找这些参数。我使用assign()创建了data.frames如图所示,对于R,您确实走错了路。与其创建多个命名的数据帧,不如创建一个包含多列的数据帧。请描述您的文件结构,并使用
read.table
获得帮助。我知道已经有一段时间了。我使用了您的建议,效果很好!
calcDF我会的避免:
eval(parse(text=paste(DFsource,“$”,VARname,sep=”“))
。这就是
dfrm[[VARname]]
应该做的。更安全。我知道已经有一段时间了。我使用了你的建议,效果很好!
calcDF我本可以避免:
eval(parse(text=paste(DFsource,“$”,VARname,sep=“))
。这就是
dfrm[[VARname]]
应该这样做。更安全。