【问题标题】:looping through variable names according to their prefix in R根据变量名在R中的前缀循环
【发布时间】:2014-03-20 12:45:24
【问题描述】:

我必须进行一些比较,我想知道如何自动化整个过程。假设我只有以下变量:

age location serial weight height age_n location_n serial_n weight_n height_n

我要比较

data[weight != weight_n,c("serial ","weight","weight_n") , drop = F]

对于每一个变量。 如何遍历所有变量?

我在尝试

for (nam in colnames(df)) {
  data['nam' != 'nam'_n,c("serial ",'nam','nam'_n) , drop = F]           
}

【问题讨论】:

    标签: r loops


    【解决方案1】:

    这是一个替代品。请注意,您应该只遍历没有_n 的列名(因此for 部分中的grep):

    for(nam in colnames(df)[-grep("_n$", colnames(df))]) {
      data[
        data[[nam]] != data[[paste0(nam, "_n"]], 
        c("serial", nam, paste0(nam, "_n")
      ]  
    }
    

    【讨论】:

    • x.1 <- data.frame(id=c(1,2,3,4,5) , a=c(1,2,3,4,5), b=c(1,2,3,4,5)) x.2 <- data.frame(id=c(1,2,3,4,5) ,id_n=c(1,2,3,4,5), a_n=c(1,1,2,3,4), b_n=c(1,1,99,3,4)) df <- merge(x.1,x.2,by="id") for(nam in colnames(df)[-grep("_n$", colnames(df))]) { df[df[[nam]] != df[[paste0(nam, "_n")]], c("id", nam, paste0(nam, "_n")) , drop = F ] } 没有输出
    • @Keniajin,如果你想在屏幕上看到输出,你需要 print 它,因为在 for 循环内运行的命令默认不打印(即 `print(data[. ...]))。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多