是否可以在数据帧单元中存储矢量?

时间:2019-01-16 12:54:44

标签: r

我正在尝试创建一个数据框,其中包含一个ID和一个数字矢量,每行的成绩计数未知,但是我不知道该怎么做。

studentmean <-
    data.frame(
      Student = character(),
      Grades = c(0),
      stringsAsFactors = FALSE
    )

稍后我尝试使用

向数据框添加新行
gradeList <- getGradesOfStudent(data$ResultFrame, matriculationNumber)$Grades
    studentmean[nrow(studentmean) + 1, ] = list(as.character(matriculationNumber), gradeList

如何在单个数据框单元格中存储数字的向量?

2 个答案:

答案 0 :(得分:3)

当然可以:) data.framelist,因此您可以在其中嵌套差异数据结构:

df <- data.frame(a = c(1,2,3), b = c("a", "b", "c"))
df$c <- list(c(1, 2, 3), c(4,5,6), c(7,8,9))

> str(df)
'data.frame':   3 obs. of  3 variables:
 $ a: num  1 2 3
 $ b: Factor w/ 3 levels "a","b","c": 1 2 3
 $ c:List of 3
  ..$ : num  1 2 3
  ..$ : num  4 5 6
  ..$ : num  7 8 9

答案 1 :(得分:2)

我同意斯蒂芬·亨德森(Stephen Henderson)的评论,即除非绝对确定它们是解决特定问题的最佳方法,否则不应该使用列表列。话虽如此,如果您决定使用列表列,则可能要考虑使用小标题而不是数据框。标记是对常规数据帧的“升级”。它们是tidyverse的一部分,并放在tibble包中。

通过小标题可以轻松创建列表列:

tibble(x = 1:3, y = list(1:5, 1:10, 1:20))

#> # A tibble: 3 x 2
#>       x y         
#>   <int> <list>    
#> 1     1 <int [5]> 
#> 2     2 <int [10]>
#> 3     3 <int [20]>

此外,您可以使用nest软件包中的命令unnesttidyr“打包”和“解包”列表列。例如:

df <- tibble(
  x = 1:3,
  y = c("a", "d,e,f", "g,h")
)
df %>%
  transform(y = strsplit(y, ",")) %>%
  unnest(y)

有关小标题的更多信息,请查阅此vignette