【问题标题】:The function names in the for loop doesn't work Rfor 循环中的函数名称不起作用 R
【发布时间】:2018-09-07 00:46:12
【问题描述】:

我有一组data.frame,列的维度相同,但行数不同。

DATA.FRAME.A
Column_A     Column_B     Column_C     Column_D      Column_E
2001-02-20      10           11           5              8

DATA.FRAME_B
Column_F     Column_G      Column_W    Column_T      Column_Q
2008-08-7        50           21          10             50

DATA.FRAME_C
Column_H     Column_J      Column_K    Column_S      Column_P
2001-02-02      13           15           61             7

我的目的是让所有 data.frame 的第一行都相同

我写这个循环是为了让我的代码简单。

t <- list(DATA.FRAME_A, DATA.FRAME_B, DATA.FRAME_C)
for (i in t ) {
  names[i] <- c("Data", "Open", "Max", "Minimun", "Close")
   }

R 没有给我任何类型的错误。

我哪里错了?

我想要这些结果

DATA.FRAME.A
   Data        Open          Max       Minimun      Close
2001-02-20      10           11           5              8

DATA.FRAME_B
 Data           Open          Max       Minimun      Close
2008-08-7        50           21          10             50

DATA.FRAME_C
 Data          Open          Max       Minimun      Close
2001-02-02      13           15           61             7

提前致谢。

弗朗西斯科

【问题讨论】:

    标签: r


    【解决方案1】:

    考虑 lapply,它是 apply 系列的一部分,它们是有用的迭代函数,它返回与输入相同数量的元素,并且在您的情况下可以返回修改后的数据框元素。甚至将setNames() 视为返回命名对象的右手函数。

    t <- list(DATA.FRAME_A, DATA.FRAME_B, DATA.FRAME_C)
    
    # ITERATE THROUGH EACH DF OF t, RENAMING COLUMNS, RETURNING MODIFIED DF
    new_t <- lapply(t, function(i) setNames(i, c("Data", "Open", "Max", "Minimun", "Close"))
    
     # RESULTS
    lapply(new_t, head)
    

    【讨论】:

    • 非常感谢!!!有用。我正在学习 R,我必须深入 lapply 家庭
    【解决方案2】:

    试试这个:

    t <- c("DATA.FRAME.A", "DATA.FRAME.B", "DATA.FRAME.C")
    for (i in 1:length(t)) {
        names(get(t[i])) <- c("Data", "Open", "Max", "Minimun", "Close")
    }
    

    【讨论】:

    • 感谢您的回答,但不起作用。 R 给了我这个错误:错误获取(*tmp*):找不到对象'NA'
    • 您是否将 data.frame 名称中的 _ 替换为 . 点?好像字符向量t中的对象不存在。
    【解决方案3】:

    根据您编写的代码,循环变量i 将是列表t 的每个单独项(不是列表中的索引,而是列表项本身)。此外,colnames 会更直接地用于此目的。编写此循环的更好方法是:

    t <- list(DATA.FRAME_A, DATA.FRAME_B, DATA.FRAME_C)
    for (i in 1:length(t)) {
      colnames(t[[i]]) <- c("Data", "Open", "Max", "Minimun", "Close")
    }
    

    【讨论】:

      【解决方案4】:

      在 R 中子设置列表需要双方括号

      t <- list(DATA.FRAME_A, DATA.FRAME_B, DATA.FRAME_C)
      for (i in seq_along(t) ) {
        names(t[[i]]) <- c("Data", "Open", "Max", "Minimun", "Close")
       }
      

      您所做的不是错误,您在 for 循环中修改了 i,但 i 是为 for 循环创建的临时变量,并且在每次迭代后被销毁,而不是修改您的列表

      【讨论】:

      • 感谢您的解释和示例。
      猜你喜欢
      • 1970-01-01
      • 2011-07-21
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      • 2015-01-05
      • 2023-03-08
      • 2018-03-19
      • 1970-01-01
      相关资源
      最近更新 更多