我有一个数据框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

}

Data,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/

    10-12 05:31