【问题标题】:Print column name in an r apply and save as new column on a dataframe在 r 中打印列名应用并保存为数据框上的新列
【发布时间】:2015-01-22 19:36:58
【问题描述】:

我已经编写了一个应用程序,我想在数据框中“循环”列的子集并打印一些输出。举个例子,我只是在将一列除以另一列的基础上进行转换(我知道还有其他方法可以做到这一点),所以我们有:

apply(df[c("a","b","c")],2,function(x){
z <- a/df[c("divisor")]
    }
)

我想打印当前正在操作的列名,但是 colnames(x)(例如)不起作用。

然后我想根据每个列名(a.exp、b.exp 或其他)将一个新列保存到同一个 df 中。

【问题讨论】:

    标签: r printing variable-assignment apply calculated-columns


    【解决方案1】:

    举个例子

    df <- data.frame(a = 1:3, b = 11:13, c = 21:23)
    

    我想打印当前正在操作的列名,但是 colnames(x)(例如)不起作用。

    将sapply 与列索引一起使用:

    sapply(seq_len(ncol(df)), function(x) names(df)[x])
    # [1] "a" "b" "c"
    

    我想根据每个列名(a.exp、b.exp 或 无论如何)到同一个df中。

    这是一种方法:

    (df <- cbind(df, setNames(as.data.frame(apply(df, 2, "^", 2)), paste(names(df), "sqr", sep = "."))))
    #   a  b  c a.sqr b.sqr c.sqr
    # 1 1 11 21     1   121   441
    # 2 2 12 22     4   144   484
    # 3 3 13 23     9   169   529
    

    【讨论】:

      【解决方案2】:

      我认为很多人都会寻找同样的问题,所以我正在回答我自己的问题(最终找到了答案)。如下所示,这两个部分都有其他答案(谢谢!),但没有将这些问题结合起来(有些例子更复杂)。

      首先,“colnames”元素似乎真的不是你可以绕过的东西(对我来说似乎很奇怪!),所以你“循环”列名,并在函数中调用实际的向量 按名称 [c(x)].

      然后关键是分配,所以创建新列,在应用中,你使用 '

      apply(colnames(df[c("a","b","c")]),function(x) {
      z <- (ChISEQCIS[c(paste0(x))]/ChISEQCIS[c("V1")])
      ChISEQCIS[c(paste0(x,"ind"))] <<- z
      }
      )
      

      https://stackoverflow.com/questions/2628621/how-do-you-use-scoping-assignment-in-r

      我很困惑,因为我最初只是模糊地想过要保存输出,我认为我需要这两个列(我错误地认为 apply 像循环一样工作,所以我可以使用计数器作为索引或其他东西)并且那里应该以相同的方式分别获取名称(例如 colname(x))。

      有几个相关的堆栈问题:

      【讨论】:

      • 注意使用 z
      猜你喜欢
      • 1970-01-01
      • 2020-11-02
      • 2022-10-22
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 2017-12-24
      • 2022-01-13
      • 2016-11-29
      相关资源
      最近更新 更多