我正在导入一个csv文件,该文件由一个双列层次结构中具有列名的交叉表组成。当我在R中获得表时,结果如下所示:
alpha X.1 X.2 beta X.1 X.2 X.3 gamma X.1
var1 var2 var3 var1 var2 var3 var4 var1 var4
1 21 50 5 22 48 6 8 25 8
2 27 50 5 24 48 6 8 33 8
3 26 50 5 28 48 6 8 33 8
4 25 50 5 28 48 6 8 20 8
此处,alpha,beta
和gamma
都是层次结构的一个级别,而var1
,var2
,var3
和{{1是第二级。
我想要的是得到如下输出,其中行名称被连接,但也记住数据的结构。
var4
这里有什么想法吗?一直无法找到解决这个问题的任何事情。提前谢谢。
答案 0 :(得分:1)
这似乎有效,虽然使用xts
似乎对na.locf()
函数有点沉重,但我知道它可以正常使用它,所以这就是我使用的。
library(xts)
#Read in data without headers
x <- read.delim("Book1.txt", skip = 2, header = FALSE)
#Read in header files transposing them into columns
headers <- data.frame(t(read.delim("Book1.txt", nrows = 2, header = FALSE)), stringsAsFactors = FALSE)
#Create a now column with the value of alpha, beta, gama or NA
headers$vals <- with(headers, ifelse(grepl("[abg]", X1), X1, NA))
#Fill down the values above
headers$vals <- na.locf(headers$vals)
#Paste column names together
colnames(x) <- with(headers, paste(vals, X2, sep = "_"))
#Resulting object
x
alpha_var1 alpha_var2 alpha_var3 beta_var1 beta_var2 beta_var3 beta_var4 gamma_ var1 gamma_var4
1 21 50 5 22 48 6 8 25 8
2 27 50 5 24 48 6 8 33 8
3 26 50 5 28 48 6 8 33 8
4 25 50 5 28 48 6 8 20 8