【问题标题】:How to add a constant value to all rows in a data.frame using a For loop [duplicate]如何使用 For 循环将常量值添加到 data.frame 中的所有行[重复]
【发布时间】:2019-02-22 02:59:43
【问题描述】:

我正在尝试创建一个简单的 data.frame,它使用 FOR LOOP 将“1”的值添加到当前 data.frame 中所有行内的每个值。

我当前的循环只是返回相同的值。这只是我的一个愚蠢的错误吗?

b<-as.data.frame(Base, nrow(length(Base)), ncol(5))
for(i in seq(names(Base))){
  j<-names(Base)[i]
  i + 1
}
b

例如,这些是来自 data.frame Sales 的原始列:

Year  A  B  C  D
2010  50 60 70 80
2011  10 44 28 20
2012  65 75 65 89
...

而我的目标是:

Year  A  B  C  D
2011  51 61 71 81
2012  11 45 29 21
2013  66 76 66 90
...

提前致谢。

【问题讨论】:

  • 这里有一些问题可能超出了您的for 循环失败原因的简单答案。 Hadley 在这里对循环进行迭代进行了不错的讨论 - r4ds.had.co.nz/iteration.html - 这可能值得一读。

标签: r for-loop


【解决方案1】:

这应该适合你。它在tidyverse 中使用dplyr 中的mutate_if 函数,而不是for 循环,但逻辑是相同的。

library(tidyverse)

df <- tibble(
  a = c(1:10),
  b = c(11:20),
  c = c(21:30)
)

df1 <- df %>%
  mutate_if(is.numeric, function(x) x+1)

第一个参数将选择数据中的所有数字列,然后第二个参数指定函数,在本例中只是加 1。

编辑:

我的初始函数也会将 1 添加到您的 year 列,因此您可能想要这样做

library(tidyverse)

df <- tibble(
  a = c(1:10),
  b = c(11:20),
  c = c(21:30)
)

df1 <- df %>%
  mutate_at(vars(-matches("a")), function(x) x+1)

除非您想将代码中最后一行的 "a" 替换为 "year"

【讨论】:

  • 如果我们要避免循环,则只需 df &lt;- df + 1
猜你喜欢
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 2016-09-29
  • 2013-04-24
  • 2015-11-28
  • 1970-01-01
  • 2013-04-14
  • 2019-03-03
相关资源
最近更新 更多