r - 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)我该怎么做?
解决方案
您可以命名您的列表元素,或使用tibble::lst
which 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。
推荐阅读
- javascript - 无法使用 api 从 axios 获取数据 - vue js
- javascript - 如何将用户输入相乘以创建其他字段?
- css - 线性渐变不适用于 IE 11 中的图像?
- html - I want Href to take me to a part of another webpage
- python - 如何用 Python 制作一个刽子手游戏
- jupyter-notebook - 使用多个 Julia 版本的 myBinder 错误
- android - publishToMavenLocal -Pversion 不改变版本
- sql-server - 将多个相似的列合并为一列
- haskell - 如何在 Haskell 中使元组成为此类的实例?
- angular - 使用服务文件时链接 http 请求