【问题标题】:Loop for on dataset name in R在R中的数据集名称上循环
【发布时间】:2021-09-08 15:53:14
【问题描述】:

我看到这个话题已经被讨论过很多次了,但我无法真正得到我正在寻找的答案。所以,我来了。

我正在尝试执行循环以在 5 个具有类似名称的数据集中创建变量:

Ech_repondants_nom_1 Ech_repondants_nom_2 Ech_repondants_nom_3 Ech_repondants_nom_4 Ech_repondants_nom_5

如果我尝试过的代码如下:

list <- c(1:5)

for (i in list) {

Ech_repondants_nom_[[i]]$sec = as.numeric(Ech_repondants_nom_[[i]]$interviewtime)
Ech_repondants_nom_[[i]]$min = round(Ech_repondants_nom_[[i]]$sec/60,1)
Ech_repondants_nom_[[i]]$heure = round(Ech_repondants_nom_[[i]]$min/60,1)

}

任何线索为什么这不起作用?

干杯!

【问题讨论】:

    标签: r loops for-loop


    【解决方案1】:

    这些是对象名称,而不是作为Ech_repondants_nom_[[i]] 子集的list 元素。我们可能需要通过pasteget 对象,即

    get(paste0("Ech_repondants_nom_", i)$sec
    

    但是,如果我们需要更新原始对象,必须调用assign。如果我们将数据集加载到list 并使用lapply 循环遍历list,则可以更轻松地完成这一切。

    lst1 <- lapply(mget(paste0("Ech_repondants_nom_", 1:5)), function(dat)
         within(dat, {sec <- as.numeric(interviewtime);
                      min <- round(sec/60, 1);
                      heure <- round(min/60, 1)}))
    

    保留为list可能会更好,但如果我们需要更新原始对象,请使用list2env

    list2env(lst1, .GlobalEnv)
    

    【讨论】:

    • 谢谢!发现您认为几乎正确的事情却大错特错,总是让人有些沮丧。
    【解决方案2】:
    Ech_repondants_nom_[[i]]
    

    实际上并没有选择该数据框,因为您不能这样调用对象。尝试创建一个将数据框作为参数的函数,然后遍历数据框

    changing_time_stamp<-function(df){
        df$sec = as.numeric(df$interviewtime)
        df$min = round(df$sec/60,1)
        df$heure = round(df$min/60,1)
    
    for (i in list) {
        changing_time_stamp(i)
    }
    

    编辑:我修复了函数中的一些变量名称

    【讨论】:

    • 如果你喜欢这个答案,请采纳!
    • 感谢您的回答!但是,我仍然收到以下错误消息“changeing_time_stamp(i) 中的错误:找不到对象'Ech_repondants_nom_'”
    猜你喜欢
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 2015-11-05
    相关资源
    最近更新 更多