【问题标题】:Loop through dataframe variables in R循环遍历 R 中的数据框变量
【发布时间】:2018-03-07 13:34:24
【问题描述】:

我有几个数据框,其中只有几个变量彼此不同。大多数情况下它们是相同的。 我想在一个循环中准备变量,所以我不必分别为我的所有数据框指定每个变量。但是我遇到了一些问题。

clist <- c("data", "data_error", "data_RT")

我首先列出了我的数据框的名称

for (i in clist) {
i$ID <- as.factor(i$ID)
i$TMS <- as.factor(i$TMS)
i$bias<- as.numeric(i$bias)
 ... }

我尝试循环遍历我想要准备的所有变量。然而这是不可能的,我收到一条错误消息:

Error in i$ID : $ operator is invalid for atomic vectors

我尝试谷歌寻求帮助,但我不明白它的解释:(你能帮我理解我做错了什么以及如何解决它吗?

【问题讨论】:

  • $-operator 不能动态工作。使用 i[,"ID"]
  • 您还需要将 clist 中的数据帧作为对象名称而不是字符串。
  • 嗨安德烈!感谢您的提示!但是,它仍然会产生错误。我现在将其更改为:clist &lt;- c(data, data_error, data_RT) for (i in clist) { i[,"ID"] &lt;- as.factor(i[,"ID"]) },但它告诉我Error in [.default(i, , "ID") : incorrect number of dimensions。这让我很困惑,因为如果我只是用“数据”替换“i”(正如我打算循环执行的那样)data[,"ID"] &lt;- as.factor(data[,"ID"]),它确实有效......关于尺寸不匹配可能源于何处的任何想法?

标签: arrays r string loops dataframe


【解决方案1】:

您可以使用数据框列表而不是名称向量:

clist <- list(data, data_error, data_RT)

然后循环遍历列表:

for (i in 1:length(clist)) {
clist[[i]]$ID <- as.factor(clist[[i]]$ID)
clist[[i]]$TMS <- as.factor(clist[[i]]$TMS)
clist[[i]]$bias<- as.numeric(clist[[i]]$bias)
 ... }

之后就可以使用了

list2env(clist,globalenv())

将数据框放回您的全局环境中。不过,我建议您将它们保留在列表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    相关资源
    最近更新 更多