r - 循环 R 中列名的特定子集

标签 r for-loop dataframe

我有一个数据框 AData,其中我提取了它的列名的某个子集,比如 SpecialNames。我想知道如何在 for 循环中引用这些列。

我当前的代码如下所示:

SpecialNames <- setdiff(colnames(AData), colnames(BData))

for ( i in SpecialNames ) {

    AData$i <- NULL # Do something to AData$i such as delete it or something else

}

唉, AData$i 似乎没有引用名称为 i 的数据框 AData 列。有没有不同的语法可以给我这个?

我在这篇文章中读到 here即:“$ 用于交互式使用。相反,在编程时,即当要解释列名时,您需要使用 [ 或 [[,因此我将 sample$i.imp 替换为 sample[[paste0(i, '.impt')]]"。

基于此评论,我猜想我一直在寻找的语法可能是 AData$[i] 或 AData$[[i]] 或 AData$[[paste0(i)]] 但这些似乎都不起作用。

有任何想法吗?

最佳答案

不知道自己在做什么,很难说是不是for循环是要走或不走的路;但是,希望这将有助于您继续前进:

## Sample data is always nice
set.seed(1)
mydf <- data.frame(A = c(1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4),
                   B = LETTERS[c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2)],
                   matrix(sample(100, 36, replace = TRUE), nrow = 12))

## Here is your vector of special names
specialnames <- setdiff(names(mydf), c("A", "B"))

## Here is a `for` loop that will print the first two rows
##   of each column named in "specialnames"
## THIS IS NOT HOW I WOULD NORMALLY DO THIS IN R
## -------------------------------------------------------
for (i in seq_along(specialnames)) {
  print(head(mydf[specialnames[i]], 2))
}

注意事项(可能):
  • for (i in seq_along(specialnames)) : 那 seq_along (或 i in 1:length(specialnames) 或类似的东西)很重要。
  • 你好像误解了[的用法和 [[ .尝试以下操作以了解它们的作用:
  • mydf["A"]
  • mydf[["A"]]
  • mydf[1, c("A", "B")]
  • 两个问题看herehere .
  • 关于r - 循环 R 中列名的特定子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19840033/

    相关文章:

    r - 将 'Working Papers' 部分(在出版物中)添加到 Hugo-academic 站点

    r - 如何在 Plotly 中记录颜色的变换值,但在颜色条上保留原始值?

    arrays - 用于访问一维数组的 Julia For 循环

    python - 如何在寻找最小值时获取带有列名的整行?

    r - mantelhaen.test() 的外部函数错误中的 NA/NaN/Inf

    c - 在 C 中循环使 RScript 性能更高效

    python - 迭代迭代器对象中的 "1 or more"元素?

    python - 返回字符串s中连续 "special symbols"的最大个数

    python - 绘制堆叠数据框

    python - pandas.nlargest() - 与重复的索引值混淆