gpt4 book ai didi

r - 组合一系列数据框并为每个数据框创建新列

转载 作者:行者123 更新时间:2023-12-04 11:05:03 27 4
gpt4 key购买 nike

我的数据集中有一个 Excel 文件,每周都有一张工作表。每张纸具有相同的行数,并且每张纸上的每一行都相同(时间段除外……工作表 1 代表第 1 周,工作表 2 代表第 2 周,以此类推)。我正在尝试将所有 Excel 工作表作为 R 中的一个数据框导入。

例如,我的数据基本上是这样结构的(还有几个列和工作表):

Week 1 sheet
ID Gender DOB Absences Lates Absences_excused
1 M 1997 5 14 5
2 F 1998 4 3 2

Week 2 sheet
ID Gender DOB Absences Lates Absences_excused
1 M 1997 2 10 3
2 F 1998 8 2 9

我正在尝试构建一个脚本,该脚本将采用 x 张数并将它们组合成一个数据框,如下所示:
Combined (ideal)
ID Gender DOB Absences.1 Lates.1 Absences.2 Lates.2
1 M 1997 5 14 2 10
2 F 1998 4 3 8 2

我正在使用 gdata 导入 Excel 文件。

我已经尝试创建一个循环(通常对 R 不利,我知道......)它将遍历 Excel 文件中的所有工作表并将每个工作表作为数据框添加到列表中:
library(gdata)

number_sheets <- 3
all.sheets <- vector(mode="list", length=number_sheets)

for (i in 1:number_sheets) {
all.sheets[[i]] <- read.xls("/path/to/file.xlsx", sheet=i)
}

这给了我一个不错的列表, all.sheets ,我可以访问,但我不确定从数据框列表中的特定列创建新数据框的最佳方法。

我已经尝试了下面的代码,它通过循环遍历数据框列表来创建一个全新的数据框。在第一个数据框中,它保存所有工作表中一致的列,然后添加特定于周的列。
Cleaned <- data.frame()
number_sheets <- 3

for (i in 1:number_sheets) {
if (i == 1) {
Cleaned <- all.sheets[[i]][,c("ID", "Gender", "DOB")]
}
Cleaned$Absences.i <- all.sheets[[i]][,c("Absences")] # wrong... obviously doesn't work... but essentially what I want
# Other week-specific columns go here... somehow...
}

但是此代码不起作用,因为 Cleaned$Absences.i显然不是在数据框中创建动态列的方式。

组合一组数据框并为我要跟踪的每个变量创建新列的最佳方法是什么?

额外的障碍:我还尝试将两列“Absences”和“Absences_excused”合并到最终数据框中的单个“Absences”列中,所以我试图让我的解决方案让我对新列执行转换,像这样(同样,这是不对的):
Cleaned$Absences.i <- all.sheets[[i]][,c("Absences")] + all.sheets[[i]][,c("Absences_excused")]  

最佳答案

合并策略是:

> Week_1_sheet <- read.table(text="ID    Gender    DOB    Absences    Lates
+ 1 M 1997 5 14
+ 2 F 1998 4 3", header=TRUE)
> Week_2_sheet <- read.table(text="ID Gender DOB Absences Lates
+ 1 M 1997 2 10
+ 2 F 1998 8 2", header=TRUE)
> merge(Week_1_sheet, Week_2_sheet, 1:3)
ID Gender DOB Absences.x Lates.x Absences.y Lates.y
1 1 M 1997 5 14 2 10
2 2 F 1998 4 3 8 2

您可以使用 names(sheet) <- sub("x", 1, sheet) 重命名列, 再次对于 y -> 2. 我认为 cbind 策略还可以,但合并可能更好学。

@TylerRinker 提出了有关“by”参数可接受参数的问题。帮助页面中的相关句子是:“可以通过名称、数字或逻辑向量指定列:名称“row.names”或数字 0 指定行名称。

关于r - 组合一系列数据框并为每个数据框创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9551555/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com