Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.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
List 查找工作区中所有数据帧中所有列的名称_List_R_Variables_Names - Fatal编程技术网

List 查找工作区中所有数据帧中所有列的名称

List 查找工作区中所有数据帧中所有列的名称,list,r,variables,names,List,R,Variables,Names,假设我在R中的一个工作区中有几个数据帧,我想要所有数据帧中列的名称列表 我认为下面的方法会奏效。但事实并非如此。在您自己的工作区中尝试 sapply(ls(),names) 为什么它不起作用?ls()创建所有数据帧的列表,然后将names函数应用于每个数据帧。这是我目前的简单问题 下一步:我想确定所有名称中包含字母“date”的列,这样我就可以对这些列中的每一列应用以下函数,而不管它们在哪个数据帧中 as.Date(dataframe$dateofenrollment,origin="189

假设我在R中的一个工作区中有几个数据帧,我想要所有数据帧中列的名称列表

我认为下面的方法会奏效。但事实并非如此。在您自己的工作区中尝试

sapply(ls(),names) 
为什么它不起作用?ls()创建所有数据帧的列表,然后将names函数应用于每个数据帧。这是我目前的简单问题

下一步:我想确定所有名称中包含字母“date”的列,这样我就可以对这些列中的每一列应用以下函数,而不管它们在哪个数据帧中

as.Date(dataframe$dateofenrollment,origin="1899-12-30")

问题的第一部分可以用
allNames来回答,它不起作用,因为
ls()
返回工作区中对象的名称,而不是对象本身

您可能需要以下内容:

lapply(ls(), function(x) if(is.data.frame(o <- get(x))) names(o))

lappy(ls(),函数(x)if(is.data.frame(o)这里是另一个解决方案,有一个简单的例子可以实现两个目标。您可以很容易地修改它以适应您的情况。如果您有问题,请告诉我

# create a set of dummy data frames
df1 = data.frame(x = rnorm(100), y = rnorm(100))
df2 = data.frame(x = rnorm(100), z = rnorm(100))
ch1 = c('a', 'b', 'c')


# get all objects
all.obj = sapply(ls(), get)

# get data frames
dfrs = all.obj[sapply(all.obj, is.data.frame)]

# get data frames containing 'x' as column name
dfrs2 = dfrs[lapply(dfrs, function(df) {'x' %in% names(df)}) == 'TRUE']

# replace x with square of x in all these data frames
dfrs3 = lapply(dfrs2, function(df) {df$x = df$x^2; df})

没有必要在R代码行的末尾添加所有的
。干得好(+!)!这种方法的一个缺点是,它创建并修改原始对象的副本,而不是原始的
df1
df2
。在现实世界的应用程序中,对象的额外副本可能会导致内存问题。是的。您建议如何使用Lappy修改其中的原始对象函数的范围?你认为->>是一种方法吗?@Gavin。我知道不需要分号。我保留它只是为了防止行被弄乱,我需要在R控制台中剪切粘贴代码。谢谢你解释“get”的必要性函数。你的一行让我得到了我想要的。我使用Chase的建议对它进行了修改。我制作了整行。lappy(ls(),函数(x)grep(“date | start”),if(is.data.frame(o)在if语句中赋值。颤栗
f <- function(){
lo <- ls(envir=.GlobalEnv)
lo <- lo[sapply(lo,function(x) eval(substitute(class(X)=="data.frame",
                                                   list(X=as.name(x))))
                   )]
if(length(lo)>0){
    res <- lapply(lo,function(x) eval(substitute(names(X),list(X=as.name(x)))))
    names(res) <- lo
} else res <- NULL
return(res)
}
ls.names <- function(){
  res <- lapply(mapply(as.name,ls(pos=1)),
                function(x) if(class(xe<-eval(x))=="data.frame") names(xe))
  res <- res[!unlist(lapply(res,is.null))]
  return(res)
}
eapply(env=.GlobalEnv,function(x) if(is.data.frame(x)) names(x))