首页 > 解决方案 > lapply 将列添加到现有数据框

问题描述

我有一个数据框列表,并且想对数据框中的每一列执行一个函数。

我已经在谷歌上搜索了一段时间,但我遇到的问题是:

df.1 <- data.frame(data=cbind(rnorm(5, 0), rnorm(5, 2), rnorm(5, 5)))
df.2 <- data.frame(data=cbind(rnorm(5, 0), rnorm(5, 2), rnorm(5, 5)))

names(df.1) <- c("a", "b", "c")
names(df.2) <- c("a", "b", "c")

ls.1<- list(df.1,df.2)


res <- lapply(ls.1, function(x){
  x$d <- x$b + x$c
  return(x)
})

返回一个新列表“res”,其中包含一组未命名的数据帧(res[[1]]、res[[2]] 等)。

[[1]]
           a        b        c        d
1  2.2378686 3.640607 4.793172 8.433780
2 -0.4411046 3.690850 5.290814 8.981664
3 -1.1490879 3.081092 4.982820 8.063912
4 -0.3024211 1.929033 4.743569 6.672602
5  1.3658726 3.395564 2.800131 6.195695

[[2]]
           a        b        c         d
1  0.3452530 3.264709 7.384127 10.648836
2 -1.2031949 3.118633 4.840496  7.959129
3  0.6177369 1.119107 4.938917  6.058024
4 -1.0470713 1.942357 5.747748  7.690106
5  0.8732836 2.704501 5.805754  8.510254

我有兴趣将列添加到原始数据帧(df.1、df.2)我该怎么做?

标签: r

解决方案


您可以命名您的列表元素,或使用tibble::lstwhich will do it for you:

ls.1<- list(df.1 = df.1,df.2 = df.2)
ls.2<- tibble::lst(df.1, df.2)

res1 <- lapply(ls.1, function(x){
  x$d <- x$b + x$c
  return(x)
})

res2 <- lapply(ls.2, function(x){
  x$d <- x$b + x$c
  return(x)
})

# $df.1
#            a         b        c        d
# 1  0.6782608 4.0774244 2.845351 6.922776
# 2  2.3620601 1.9395314 5.438832 7.378364
# 3 -0.5913838 2.0579972 4.312360 6.370357
# 4  0.5532147 0.8581389 5.867889 6.726027
# 5 -0.3251044 1.9838598 4.321008 6.304867
# 
# $df.2
#            a        b        c        d
# 1  1.9918131 3.195105 5.715858 8.910963
# 2  0.2525537 2.507358 5.040691 7.548050
# 3  0.5038298 3.112855 5.265974 8.378830
# 4  0.4873384 3.377182 5.685714 9.062896
# 5 -0.6539881 0.157948 5.407508 5.565456

要覆盖您可以list2env在输出中使用的原始 data.frames。


推荐阅读