r - 使用`lapply`重命名列表中的选定列
问题描述
我试图了解如何在 Lapply 函数中创建迭代,并且在尝试重命名列表中的列时遇到问题。请参阅下面的可重现示例。
df1 <- data.frame(fruit=c("apple", "Orange", "Pear"), location = c("Japan", "China", "Nigeria"), price = c(32,53,12))
df2 <- data.frame(grocery = c("Durian", "Apple", "Watermelon"),
place=c("Korea", "Japan", "Malaysia"),
name = c("Mark", "John", "Tammy"),
favourite.food = c("Apple", "ORANGE", "Cakes"),
invoice = c("XD1", "XD2", "XD3"))
df3 <- data.frame(address=c("address1", "address2", "address3"), location = c("USA", "UK", "China"))
allobj <- ls()[sapply(ls(),function(t) is.data.frame(get(t)))]
templist <- list(df1, df2, df3)
通过一个简单的 for 循环,我可以重命名每个数据框中的列名
for (i in seq_along(templist)){
colnames(templist[[i]]) <- c(paste0("From ", allobj[1]) , paste0("From ", allobj[i+1])) #will change the column name of each dataframe in a list in seq
}
但是使用 lapply,我无法更改每个数据框的第 2 列。有人可以指出我的错误吗?谢谢!
lapply(seq_along(templist), function(x) {
i <- seq_along(templist)
names(x)[2] <- allobj[i]
x
})
预期产出
[[1]]
fruit df1 price
1 apple Japan 32
2 Orange China 53
3 Pear Nigeria 12
[[2]]
grocery df2 name favourite.food invoice
1 Durian Korea Mark Apple XD1
2 Apple Japan John ORANGE XD2
3 Watermelon Malaysia Tammy Cakes XD3
[[3]]
address df3
1 address1 USA
2 address2 UK
3 address3 China
解决方案
在这种情况下,我建议mapply
改用
mapply(function(x, y) {names(x)[2] <- y; x}, templist, allobj)
#[[1]]
# fruit df1 price
#1 apple Japan 32
#2 Orange China 53
#3 Pear Nigeria 12
#[[2]]
# grocery df2 name favourite.food invoice
#1 Durian Korea Mark Apple XD1
#2 Apple Japan John ORANGE XD2
#3 Watermelon Malaysia Tammy Cakes XD3
#[[3]]
# address df3
#1 address1 USA
#2 address2 UK
#3 address3 China
如果你想使用lapply
,你可以使用作为x
子集的索引,因为对于第一个列表,我们想要从第一个值的名称,对于第二个列表,我们想要第二个值等等。templist
allobj
allobj
allobj
lapply(seq_along(templist), function(x) {
names(templist[[x]])[2] <- allobj[x]
templist[[x]]
})
推荐阅读
- python-3.x - 使用python从ElasticSearch中查询数据
- java - 在Java中使用JSch转发端口时“本地端口......无法绑定”
- qt - QML TableView 禁用水平滚动条
- c# - NMS wsdl 集成
- gson - 如何将 JSON 文件导入 Android 上的 objectbox 数据库
- docker - 在 kubernetes 中创建或删除 pod 时触发事件以在某些数据库中写入或删除其 IP
- javascript - 从对象数组中查找字符串中的数值并进行计算
- php - 如何处理被编码两次的 JSON?
- redis - Redis:特定 SMEMBERS 的排序集
- node.js - 状态码:Heroku 上托管的 React 前端中不允许出现 405