在for循环中,如何操作r中的数据帧

时间:2017-12-13 06:57:25

标签: r

我是R初学者;我现在正从SAS转移到R。

我在R中有如此多的数据帧,称为x1,x2,x3 ...... xn,它们都有名为a和b的列。所以我尝试添加一个名为c的列,其中c由a和b添加。此外,我想将此c列添加到具有for循环的所有数据帧。我怎么能这样做?这是一个示例代码,但它确实无效。

a<-c(1:3)
b<-c(2:4)
x1<-data.frame(a,b)
a<-c(11:13)
b<-c(22:24)
x2<-data.frame(a,b)
for (i in 1:2)
{paste0("x",i)$c<-a+b}

2 个答案:

答案 0 :(得分:2)

您可以采取多种方法。我假设你需要保持每个数据帧被隔离。根据您的要求,这有两种可能性。

数据框列表

library(dplyr)

x <- list(x1 = x1, x2 = x2)

lapply(x, mutate, c = a + b)

# $x1
#   a b c
# 1 1 2 3
# 2 2 3 5
# 3 3 4 7
# 
# $x2
#    a  b  c
# 1 11 22 33
# 2 12 23 35
# 3 13 24 37

绑定行并添加id列

df <- bind_rows(x1 = x1, x2 = x2, .id = "source")

df %>% mutate(c = a + b)

#   source  a  b  c
# 1     x1  1  2  3
# 2     x1  2  3  5
# 3     x1  3  4  7
# 4     x2 11 22 33
# 5     x2 12 23 35
# 6     x2 13 24 37

答案 1 :(得分:0)

您可以先将数据框名称放在矢量

> paste0("x",1:2) -> names.df
> names.df
[1] "x1" "x2"

使用名称向量将数据框放入列表

> Lst.df<-lapply(  names.df,function(x) eval(parse(text = x)))
> Lst.df
[[1]]
  a b
1 1 2
2 2 3
3 3 4

[[2]]
   a  b
1 11 22
2 12 23
3 13 24

然后将 lapply应用于数据框列表

> lapply(Lst.df,function(x) {x$c <- x$a +x$b;x})
[[1]]
  a b c
1 1 2 3
2 2 3 5
3 3 4 7

[[2]]
   a  b  c
1 11 22 33
2 12 23 35
3 13 24 37