r - 如何将年份填充到 R 中的数据框列表中
问题描述
我有一个包含 11 个数据框的列表,并希望在每个数据框内创建一个新列,并将该列填充为c(2005:2015)
. 问题是它为数据框中的 255 行迭代 11 项(年),因此显示错误。我希望它不应该迭代数据框中的行,而是迭代列表中的数据框。所以第一个数据框有 255 行 Year 显示值 2005 等等。
我已经尝试了以下代码,但正如我所说。它在数据帧内迭代,而不是我希望它为每个数据帧只填充一个值,并在列表上迭代而不是下一层。
tf2 <- lapply(tf2, function(x) mutate(x, YEAR = c(2005:2015)))
注意:mutate
不能直接应用于类的对象list
。
我正在尝试这样的新东西,但是我的代码是错误的,需要更正。
year <- c(2005:2015)
ChangeYears = function(x)
{
for i in 1:length(tf2)
{
x[i] <- lapply(mutate(YEAR = c(year[i])))
}
}
tf2 <- lapply(tf2, ChangeYears)
根据@GSW建议的修改我正在尝试这个
ChangeYears = function(x){
for(i in 1:11) {
x[[i]] = cbind(x[[i]], Year=2004+i) }
}
lapply(tf2, ChangeYears)
但我收到以下错误。
Error in .subset2(x, i, exact = exact) : subscript out of bounds
.
解决方案
这是一个简单的例子。
## A list of 11 data frames
tf2 = list()
for(i in 1:11) {
tf2[[i]] = data.frame(x = rnorm(10), y = rnorm(10)) }
## Add a year column to each.
for(i in 1:11) {
tf2[[i]] = cbind(tf2[[i]], Year=2004+i) }
添加:
这会修改您建议的功能,使其正常工作。
ChangeYears = function(x){
for(i in 1:11) {
x[[i]] = cbind(x[[i]], Year=2004+i) }
x
}
tf2 = ChangeYears(tf2)
推荐阅读
- oracle11g - Pentaho 错误 - ConnectionServiceImpl.ERROR_0009 - 连接到数据库失败
- python - 如何遍历结构响应:对话流
- mips - 不同场景对单周期数据路径的影响(beq 命令)
- spring - 如何在独立的 Turbine 应用程序中激活 /turbine.stream 端点
- angular - Syncfusion JS2 Angular DataGrid过滤所有数据?
- xml - 使用 XSLT 映射 xml:CDATA 阻止程序
- google-apps-script - Google Script:当单元格被填满时,提示询问用户是否要运行脚本
- c# - 如何检查新添加的记录值到 BindingSource
- google-apps-script - 使用 Google App Script 操作 Google Doc 大纲
- azure-devops - 如何在新的 VSTS 预览功能中配置 VSTS Git 存储库?