在 R 中导入 3 行的第 headers 列。用最新的 non-missing 列替换缺失的
Import in R with column headers across 3 rows. Replace missing with latest non-missing column
我需要帮助导入数据,其中我的列 header 分为 3 行,隐含了一些 header 名称。这是我的 xlsx 文件的样子
1 USA China
2 Dollars Volume Dollars Volume
3 Category Brand CY2016 CY2017 CY2016 CY2017 CY2016 CY_2017 CY2016 CY2017
4 Chocolate Snickers 100 120 15 18 100 80 20 22
5 Chocolate Twix 70 80 8 10 75 50 55 20
我想将数据导入 R,除了我想保留第 1 行和第 2 行中的 header。另一个挑战是隐含了一些 header。如果 header 为空白,我希望它使用左侧列中的单元格。我希望它导入的示例。
1 Category Brand USA_Dollars_CY2016 USA_Dollars_CY2017 USA_Volume_CY2016 USA_Volume_CY2017 China_Dollars_CY2016 China_Dollars_CY_2017 China_Volume_CY2016 China_Volume_CY2017
2 Chocolate Snickers 100 120 15 18 100 80 20 22
3 Chocolate Twix 70 80 8 10 75 50 55 20
我目前的方法是导入,跳过第 1 行和第 2 行,然后根据已知位置重命名列。但是,我希望存在可以阻止我执行此步骤的代码。谢谢!!
我假设您已经将 xlsx 数据保存为 .csv 格式,因此可以这样读取:
header <- read.csv("data.csv", header=F, colClasses="character", nrow=3)
dat <- read.csv("data.csv", header=F, skip=3)
棘手的部分是 header。这个函数应该做到:
construct_colnames <- function(header) {
f <- function(x) {
x <- as.character(x)
c("", x[!is.na(x) & x != ""])[cumsum(!is.na(x) & x != "") + 1]
}
res <- apply(header, 1, f)
res <- apply(res, 1, paste0, collapse="_")
sub("^_*", "", res)
}
colnames(dat) <- construct_colnames(header)
dat
结果:
Category Brand USA_Dollars_CY2016 USA_Dollars_CY2017 USA_Volume_CY2016 USA_Volume_CY2017 China_Dollars_CY2016
1 Chocolate Snickers 100 120 15 18 100
2 Chocolate Twix 70 80 8 10 75
China_Dollars_CY_2017 China_Volume_CY2016 China_Volume_CY2017
1 80 20 22
2 50 55 20
我需要帮助导入数据,其中我的列 header 分为 3 行,隐含了一些 header 名称。这是我的 xlsx 文件的样子
1 USA China
2 Dollars Volume Dollars Volume
3 Category Brand CY2016 CY2017 CY2016 CY2017 CY2016 CY_2017 CY2016 CY2017
4 Chocolate Snickers 100 120 15 18 100 80 20 22
5 Chocolate Twix 70 80 8 10 75 50 55 20
我想将数据导入 R,除了我想保留第 1 行和第 2 行中的 header。另一个挑战是隐含了一些 header。如果 header 为空白,我希望它使用左侧列中的单元格。我希望它导入的示例。
1 Category Brand USA_Dollars_CY2016 USA_Dollars_CY2017 USA_Volume_CY2016 USA_Volume_CY2017 China_Dollars_CY2016 China_Dollars_CY_2017 China_Volume_CY2016 China_Volume_CY2017
2 Chocolate Snickers 100 120 15 18 100 80 20 22
3 Chocolate Twix 70 80 8 10 75 50 55 20
我目前的方法是导入,跳过第 1 行和第 2 行,然后根据已知位置重命名列。但是,我希望存在可以阻止我执行此步骤的代码。谢谢!!
我假设您已经将 xlsx 数据保存为 .csv 格式,因此可以这样读取:
header <- read.csv("data.csv", header=F, colClasses="character", nrow=3)
dat <- read.csv("data.csv", header=F, skip=3)
棘手的部分是 header。这个函数应该做到:
construct_colnames <- function(header) {
f <- function(x) {
x <- as.character(x)
c("", x[!is.na(x) & x != ""])[cumsum(!is.na(x) & x != "") + 1]
}
res <- apply(header, 1, f)
res <- apply(res, 1, paste0, collapse="_")
sub("^_*", "", res)
}
colnames(dat) <- construct_colnames(header)
dat
结果:
Category Brand USA_Dollars_CY2016 USA_Dollars_CY2017 USA_Volume_CY2016 USA_Volume_CY2017 China_Dollars_CY2016
1 Chocolate Snickers 100 120 15 18 100
2 Chocolate Twix 70 80 8 10 75
China_Dollars_CY_2017 China_Volume_CY2016 China_Volume_CY2017
1 80 20 22
2 50 55 20