在 r 应用中打印列名称并另存为数据帧上的新列



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

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

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

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

例如,以

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

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

首先,似乎"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))。

有几个相关的堆栈问题:

  • https://stackoverflow.com/questions/9624866/access-to-column-name-of-dataframe-with-apply-function
  • https://stackoverflow.com/questions/21512041/printing-a-column-name-inside-lapply-function
  • https://stackoverflow.com/questions/10956873/how-to-print-the-name-of-current-row-when-using-apply-in-r
  • https://stackoverflow.com/questions/7681013/apply-over-matrix-by-column-any-way-to-get-column-name(最容易理解)

最新更新