2017-08-09 185 views
0

我创建了一个数据框,其中列A和B包含子列。这里有一个例子:如何去卷积2D数据帧?

colnames(df) 
#[1] "A" "B" "C" "D" 

colnames(df$A) 
#[1] "X1" "X2" "X3" "X4" 

colnames(df$B) 
#[1] "X1" "X2" 

我的问题是如何去卷积这种结构为:

colnames(df) 
#[1] "A.X1" "A.X2" "A.X3" "A.X4" "B.X1" "B.X2" 

例如:

structure(list(Name = 1:5, A = structure(list(X1 = structure(c(1L, 
2L, 1L, 2L, 1L), .Label = c("1", "5"), class = "factor"), X2 = structure(c(1L, 
2L, 1L, 2L, 1L), .Label = c("2", "4"), class = "factor"), X3 = structure(c(2L, 
1L, 2L, 1L, 2L), .Label = c("3", "4"), class = "factor"), X4 = structure(c(2L, 
1L, 2L, 1L, 2L), .Label = c("1", "5"), class = "factor")), .Names = c("X1", 
"X2", "X3", "X4"), row.names = c(NA, -5L), class = "data.frame"), 
    B = structure(list(X1 = structure(c(2L, 1L, 2L, 1L, 2L), .Label = c("1", 
    "5"), class = "factor"), X2 = structure(c(2L, 1L, 2L, 1L, 
    2L), .Label = c("2", "4"), class = "factor")), .Names = c("X1", 
    "X2"), row.names = c(NA, -5L), class = "data.frame")), .Names = c("Name", 
"A", "B"), row.names = c(NA, -5L), class = "data.frame") 
+1

使用'dput'做重复的例子 – Sotos

回答

0

您可以从tidyr包使用unnest()功能。

首先让我们创建一些示例数据。让我知道这是不是你的数据看起来如何。

library(tidyverse) # Loads tidyr, tibble, and other useful packages 

df <- tibble(A = list(tibble(X1 = rnorm(327), X2 = rnorm(327), 
      X3 = rnorm(327), X4 = rnorm(327))), 
      B = list(tibble(X1 = rnorm(327), X2 = rnorm(327)))) 

现在unnest你就差不多完成了。

df <- unnest(df) 

所有剩下的就是重新命名列,因为unnest有自己的名称会自动出现。

colnames(df) <- c("A.X1", "A.X2", "A.X3", "A.X4", "B.X1", "B.X2") 
+0

遇到错误试图UNNEST时: 错误:data_frames只能包含一维原子向量和列表 – user2904120

+0

请参阅我的数据帧结构的更新后的上述 – user2904120

+0

它看起来像你的数据已经在所需的格式。 –