【问题标题】:Get just a variable name in each iteration using an apply [duplicate]使用 apply [重复] 在每次迭代中只获取一个变量名
【发布时间】:2017-03-06 08:19:21
【问题描述】:

我将lapply() 与一个函数一起使用,但不是在每次迭代中只获取一个变量的名称,而是从我的数据集中获取每个变量名称。

colnames(data) <- c("var1", "var2")

varnames <- function(var, name){
   return(name)
}

print(lapply(data, varnames, name=names(data)))

我得到这个输出:

$var1
[1] "var1" "var2"

$var2
[1] "var1" "var2"

但是,我想得到:

$var1
[1] "var1"

$var2
[1] "var2"

【问题讨论】:

  • 您有一个 2 列数据集,当您执行 lapply 时,它会循环遍历列,即向量列表。在以这种方式指定 name = names(data) 之前,您正在获取每个变量名称。
  • @akrun 我明白了......但是我怎样才能得到一个变量名而不是每个变量名?第一个变量的名字第一次,第二个之后...
  • as.list(colnames(data)) 会做你想做的事吗?
  • 您可以在names(data)上使用lapply,并使用function(x) { print(x); print(dt[[x]]) }等函数来操作数据。

标签: r loops apply var lapply


【解决方案1】:

您在代码中指定的是:

lapply(data, varnames, name=names(data))

循环data 的列,并为函数varnames 提供一个附加变量name。请注意,这里的代码不会遍历name,而是按原样传递它。

如果你想得到你需要的输出,你可以使用mapply。这本质上是 lapply 的一个版本,它允许迭代多个变量:

mapply(varnames, data, names(data)) 
  var1   var2 
"var1" "var2" 

要对每一列进行一些操作,并且仍然以某种方式保留名称,我会使用dplyr(因为你并不完全清楚你的最终目标是什么,我猜这就是你的位置之后):

library(dplyr)
data = data.frame(var1 = runif(10), var2 = runif(10), 
                  var3 = runif(10), var4 = runif(10))
data %>% summarise_each(funs(mean, sd, median), var1:var4)
  var1_mean var2_mean var3_mean var4_mean   var1_sd   var2_sd  var3_sd
1 0.6063735 0.5308427 0.2872901 0.6043027 0.2586042 0.2303065 0.245709
    var4_sd var1_median var2_median var3_median var4_median
1 0.2721362   0.6814136   0.4535982    0.200493    0.644607

或者使用gather 中的tidyr

data %>% 
   gather(variable, value) %>% 
   group_by(variable) %>% 
     summarise_each(funs(mean, sd, median), value)
Source: local data frame [4 x 4]

  variable      mean        sd    median
    (fctr)     (dbl)     (dbl)     (dbl)
1     var1 0.6063735 0.2586042 0.6814136
2     var2 0.5308427 0.2303065 0.4535982
3     var3 0.2872901 0.2457090 0.2004930
4     var4 0.6043027 0.2721362 0.6446070

【讨论】:

  • 我有一个包含 40 个变量的数据框,我想使用一个为每个变量绘制条形图的函数。我想使用每个变量的名称作为每个条形图的标题。这就是我的目标。
猜你喜欢
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多