我有以下数据框:
Test <- data.frame(matrix(NA, nrow = 1, ncol = 3))
Test$X1 <- list(c(0,1))
Test$X2 <- list(c(2,3))
Test$X3 <- list(c(4,5))
它允许我在列表中放置列表:
Test
X1 X2 X3
1 0, 1 2, 3 4, 5
这里保持简单,但这将是数据帧的n。这被传递到几个子程序中。现在我需要提取该元素信息。为此,我遍历列/行。我发现在子程序中我需要做一次
Test <- as.list(Test)
Test
$X1
$X1[[1]]
[1] 0 1
$X2
$X2[[1]]
[1] 2 3
$X3
$X3[[1]]
[1] 4 5
让子程序理解这个对象。我现在需要提取数据。要做到这一点,我可以使用
dummy_list <- Test$X2[[1]]
print(dummy_list[1])
print(dummy_list[2])
根据预期给出值2和3。我需要自动执行此操作,以便循环遍历每对值,即数据框中的每个元素。在这个例子中,我需要:测试$ X1 [[1]],测试$ X2 [[1]]和测试$ X3 [[1]]。如何循环列名Xi?迄今为止的所有尝试都失败了。我还看了转置数据并修复了列名(X1),然后我也能够在Test $ X1 [[i]]上循环,但测试给出了
X1 X2 X3
[1,] List,1 List,1 List,1
这不是我想要的。有谁知道怎么做?
答案 0 :(得分:1)
假设,
Test1 <- rbind(Test, Test)
然后保持你的尝试,
sapply(Test1, function(i) sapply(seq(nrow(Test1)), function(j) i[[j]]))
# X1 X2 X3
#[1,] 0 2 4
#[2,] 1 3 5
#[3,] 0 2 4
#[4,] 1 3 5
但是,使用unnest
,
tidyr
会变得非常简单
tidyr::unnest(Test1)
#which outputs a tibble
# A tibble: 4 × 3
# X1 X2 X3
# <dbl> <dbl> <dbl>
#1 0 2 4
#2 1 3 5
#3 0 2 4
#4 1 3 5
也可以使用matrix
matrix(unlist(Test1), ncol = ncol(Test1))
#which outputs a matrix
# [,1] [,2] [,3]
#[1,] 0 2 4
#[2,] 1 3 5
#[3,] 0 2 4
#[4,] 1 3 5