我是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}
答案 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
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