我正在尝试创建一个数据框,其中包含一个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
如何在单个数据框单元格中存储数字的向量?
答案 0 :(得分:3)
当然可以:) data.frame
是list
,因此您可以在其中嵌套差异数据结构:
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
软件包中的命令unnest
和tidyr
“打包”和“解包”列表列。例如:
df <- tibble(
x = 1:3,
y = c("a", "d,e,f", "g,h")
)
df %>%
transform(y = strsplit(y, ",")) %>%
unnest(y)
有关小标题的更多信息,请查阅此vignette。