从列表中创建data.frame变量
是否可以“通过引用”为对象创建和指定名称? 例如,我有一个大的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", "
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
获取帮助。请改用packagedata.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]]
应该这样做。更安全。