我有一个数据框 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")]
关于r - 循环 R 中列名的特定子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19840033/