【问题标题】:R loop over string and use it to refer to column names [duplicate]R循环遍历字符串并使用它来引用列名[重复]
【发布时间】:2019-06-24 08:26:08
【问题描述】:

我有列名称为 1990.x ..2000.x、1990.y、..2000.y 的数据框。我想用对应年份的 .y 值替换以“.x”结尾的变量中的 NA。它是公式 1990.x = 0.5+0.2*log(1990.y) 的逐元素计算

我想做这样的事情:

for (v in colnames(df[ ,grepl(".x",names(df))])) {
  print(v)
  df$v <- ifelse(is.na(df$v), ols$coefficients[1]+ols$coefficients[2]*log(df$gsub(".x",".y",v)), df$v)
}

但这不起作用。我怎样才能使这个循环工作,或者有没有更好的解决方案? 谢谢

【问题讨论】:

  • 这将有助于提供部分或全部数据框,使用 例如 dput(df)。我还想知道 NA 是否是由于合并或加入而产生的,并且可以避免。
  • 您可以避免循环并执行x_cols &lt;- grep("x$", names(dat)); y_cols &lt;- grep("y$", names(dat)); dat[x_cols][is.na(dat[x_cols])] &lt;- 0.5 + 0.2*log(dat[y_cols][is.na(dat[x_cols])]); dat

标签: r string loops replace


【解决方案1】:

$ 运算符为方便起见提供,但不能在您选择的列的值将发生变化的 for 循环中使用,例如,在您的 for 循环中。您的代码将需要使用 [ 运算符(左方括号和右方括号):

df[,v] <- ifelse(is.na(df[,v]), ols$coefficients[1]+ols$coefficients[2]*log(df$gsub(".x",".y",v)), df[,v])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 2021-04-02
    • 2021-01-15
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多