计算数据帧列表中的数据帧行数
Count rows of dataframes within a list of dataframes
我有一个数据帧列表,str(datalist,max.level = 1)
显示
List of 9
$ :'data.frame': 200 obs. of 21 variables:
$ :'data.frame': 200 obs. of 21 variables:
$ :'data.frame': 200 obs. of 21 variables:
$ :'data.frame': 200 obs. of 21 variables:
$ :'data.frame': 200 obs. of 21 variables:
$ :'data.frame': 200 obs. of 21 variables:
$ :'data.frame': 200 obs. of 21 variables:
$ :'data.frame': 200 obs. of 21 variables:
$ :'data.frame': 41 obs. of 21 variables:
现在数据框的21个变量中的一些变量又是数据框了。例如。第 18 个变量是一个名为 topics
的数据框,它又包含 3 个变量。如何获取每个 topics
数据帧中的行数?
我尝试使用 purrr
包中的 map()
函数:x <- map(datalist, ~.x[["topics"]])
然后 sapply(x, NROW)
但这给了我原始数据帧的行数而不是topics
数据框。任何帮助将不胜感激。
给你一个 topics
数据框的例子,datalist[[1]]$topics[[1]]
urlkey name id
1 selfdefense Self-Defense 443
2 martial Martial Arts 681
3 jujitsu Jiu Jitsu 9615
4 mixed-martial-arts Mixed Martial Arts 15514
5 kickboxing Kickboxing 18225
6 jiu-jitsu Jiu-jitsu 21219
7 brazilian-jiujitsu Brazilian Jiu-Jitsu 22237
8 mma-mixed-martial-arts MMA Mixed Martial Arts 35023
9 brazilian-jiu-jitsu Brazilian Jiu Jitsu 46818
count_rows <- function(dfs) {
nrow(dfs$topics)
}
count <- lapply(datalist, count_rows)
count_rows
函数只是对列表中的每个数据帧进行子集化,然后在您的 "topics" 数据帧上应用 nrow
。
您描述的解决方案对我有用:
做一个可重现的例子:
datalist <- list(
data.frame(V1 = 1:2, topics = I(list(mtcars, mtcars))),
data.frame(V1 = 1:2, topics = I(list(mtcars, mtcars)))
)
str(datalist)
# List of 2
# $ :'data.frame': 2 obs. of 2 variables:
# ..$ V1 : int [1:2] 1 2
# ..$ topics:List of 2
# .. ..$ :'data.frame': 32 obs. of 11 variables:
# .. .. ..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
# .. .. ..$ cyl : num [1:32] 6 6 4 6 8 6 8 4 4 6 ...
# .. .. ..$ disp: num [1:32] 160 160 108 258 360 ...
# .. .. ..$ hp : num [1:32] 110 110 93 110 175 105 245 62 95 123 ...
# .. .. ..$ drat: num [1:32] 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
# .. .. ..$ wt : num [1:32] 2.62 2.88 2.32 3.21 3.44 ...
# .. .. ..$ qsec: num [1:32] 16.5 17 18.6 19.4 17 ...
# .. .. ..$ vs : num [1:32] 0 0 1 1 0 1 0 1 1 1 ...
# .. .. ..$ am : num [1:32] 1 1 1 0 0 0 0 0 0 0 ...
# .. .. ..$ gear: num [1:32] 4 4 4 3 3 3 3 4 4 4 ...
# .. .. ..$ carb: num [1:32] 4 4 1 1 2 1 4 2 2 4 ...
# .. ..$ :'data.frame': 32 obs. of 11 variables:
# .. .. ..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
# .. .. ..$ cyl : num [1:32] 6 6 4 6 8 6 8 4 4 6 ...
# .. .. ..$ disp: num [1:32] 160 160 108 258 360 ...
# .. .. ..$ hp : num [1:32] 110 110 93 110 175 105 245 62 95 123 ...
# .. .. ..$ drat: num [1:32] 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
# .. .. ..$ wt : num [1:32] 2.62 2.88 2.32 3.21 3.44 ...
# .. .. ..$ qsec: num [1:32] 16.5 17 18.6 19.4 17 ...
# .. .. ..$ vs : num [1:32] 0 0 1 1 0 1 0 1 1 1 ...
# .. .. ..$ am : num [1:32] 1 1 1 0 0 0 0 0 0 0 ...
# .. .. ..$ gear: num [1:32] 4 4 4 3 3 3 3 4 4 4 ...
# .. .. ..$ carb: num [1:32] 4 4 1 1 2 1 4 2 2 4 ...
# .. ..- attr(*, "class")= chr "AsIs"
# $ :'data.frame': 2 obs. of 2 variables:
# ..$ V1 : int [1:2] 1 2
# ..$ topics:List of 2
# .. ..$ :'data.frame': 32 obs. of 11 variables:
# .. .. ..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
# .. .. ..$ cyl : num [1:32] 6 6 4 6 8 6 8 4 4 6 ...
# .. .. ..$ disp: num [1:32] 160 160 108 258 360 ...
# .. .. ..$ hp : num [1:32] 110 110 93 110 175 105 245 62 95 123 ...
# .. .. ..$ drat: num [1:32] 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
# .. .. ..$ wt : num [1:32] 2.62 2.88 2.32 3.21 3.44 ...
# .. .. ..$ qsec: num [1:32] 16.5 17 18.6 19.4 17 ...
# .. .. ..$ vs : num [1:32] 0 0 1 1 0 1 0 1 1 1 ...
# .. .. ..$ am : num [1:32] 1 1 1 0 0 0 0 0 0 0 ...
# .. .. ..$ gear: num [1:32] 4 4 4 3 3 3 3 4 4 4 ...
# .. .. ..$ carb: num [1:32] 4 4 1 1 2 1 4 2 2 4 ...
# .. ..$ :'data.frame': 32 obs. of 11 variables:
# .. .. ..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
# .. .. ..$ cyl : num [1:32] 6 6 4 6 8 6 8 4 4 6 ...
# .. .. ..$ disp: num [1:32] 160 160 108 258 360 ...
# .. .. ..$ hp : num [1:32] 110 110 93 110 175 105 245 62 95 123 ...
# .. .. ..$ drat: num [1:32] 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
# .. .. ..$ wt : num [1:32] 2.62 2.88 2.32 3.21 3.44 ...
# .. .. ..$ qsec: num [1:32] 16.5 17 18.6 19.4 17 ...
# .. .. ..$ vs : num [1:32] 0 0 1 1 0 1 0 1 1 1 ...
# .. .. ..$ am : num [1:32] 1 1 1 0 0 0 0 0 0 0 ...
# .. .. ..$ gear: num [1:32] 4 4 4 3 3 3 3 4 4 4 ...
# .. .. ..$ carb: num [1:32] 4 4 1 1 2 1 4 2 2 4 ...
# .. ..- attr(*, "class")= chr "AsIs"
您的解决方案:
library(purrr)
map(datalist, ~ sapply(.x[["topics"]], NROW))
# [[1]]
# [1] 32 32
#
# [[2]]
# [1] 32 32
我有一个数据帧列表,str(datalist,max.level = 1)
显示
List of 9
$ :'data.frame': 200 obs. of 21 variables:
$ :'data.frame': 200 obs. of 21 variables:
$ :'data.frame': 200 obs. of 21 variables:
$ :'data.frame': 200 obs. of 21 variables:
$ :'data.frame': 200 obs. of 21 variables:
$ :'data.frame': 200 obs. of 21 variables:
$ :'data.frame': 200 obs. of 21 variables:
$ :'data.frame': 200 obs. of 21 variables:
$ :'data.frame': 41 obs. of 21 variables:
现在数据框的21个变量中的一些变量又是数据框了。例如。第 18 个变量是一个名为 topics
的数据框,它又包含 3 个变量。如何获取每个 topics
数据帧中的行数?
我尝试使用 purrr
包中的 map()
函数:x <- map(datalist, ~.x[["topics"]])
然后 sapply(x, NROW)
但这给了我原始数据帧的行数而不是topics
数据框。任何帮助将不胜感激。
给你一个 topics
数据框的例子,datalist[[1]]$topics[[1]]
urlkey name id
1 selfdefense Self-Defense 443
2 martial Martial Arts 681
3 jujitsu Jiu Jitsu 9615
4 mixed-martial-arts Mixed Martial Arts 15514
5 kickboxing Kickboxing 18225
6 jiu-jitsu Jiu-jitsu 21219
7 brazilian-jiujitsu Brazilian Jiu-Jitsu 22237
8 mma-mixed-martial-arts MMA Mixed Martial Arts 35023
9 brazilian-jiu-jitsu Brazilian Jiu Jitsu 46818
count_rows <- function(dfs) {
nrow(dfs$topics)
}
count <- lapply(datalist, count_rows)
count_rows
函数只是对列表中的每个数据帧进行子集化,然后在您的 "topics" 数据帧上应用 nrow
。
您描述的解决方案对我有用:
做一个可重现的例子:
datalist <- list(
data.frame(V1 = 1:2, topics = I(list(mtcars, mtcars))),
data.frame(V1 = 1:2, topics = I(list(mtcars, mtcars)))
)
str(datalist)
# List of 2
# $ :'data.frame': 2 obs. of 2 variables:
# ..$ V1 : int [1:2] 1 2
# ..$ topics:List of 2
# .. ..$ :'data.frame': 32 obs. of 11 variables:
# .. .. ..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
# .. .. ..$ cyl : num [1:32] 6 6 4 6 8 6 8 4 4 6 ...
# .. .. ..$ disp: num [1:32] 160 160 108 258 360 ...
# .. .. ..$ hp : num [1:32] 110 110 93 110 175 105 245 62 95 123 ...
# .. .. ..$ drat: num [1:32] 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
# .. .. ..$ wt : num [1:32] 2.62 2.88 2.32 3.21 3.44 ...
# .. .. ..$ qsec: num [1:32] 16.5 17 18.6 19.4 17 ...
# .. .. ..$ vs : num [1:32] 0 0 1 1 0 1 0 1 1 1 ...
# .. .. ..$ am : num [1:32] 1 1 1 0 0 0 0 0 0 0 ...
# .. .. ..$ gear: num [1:32] 4 4 4 3 3 3 3 4 4 4 ...
# .. .. ..$ carb: num [1:32] 4 4 1 1 2 1 4 2 2 4 ...
# .. ..$ :'data.frame': 32 obs. of 11 variables:
# .. .. ..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
# .. .. ..$ cyl : num [1:32] 6 6 4 6 8 6 8 4 4 6 ...
# .. .. ..$ disp: num [1:32] 160 160 108 258 360 ...
# .. .. ..$ hp : num [1:32] 110 110 93 110 175 105 245 62 95 123 ...
# .. .. ..$ drat: num [1:32] 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
# .. .. ..$ wt : num [1:32] 2.62 2.88 2.32 3.21 3.44 ...
# .. .. ..$ qsec: num [1:32] 16.5 17 18.6 19.4 17 ...
# .. .. ..$ vs : num [1:32] 0 0 1 1 0 1 0 1 1 1 ...
# .. .. ..$ am : num [1:32] 1 1 1 0 0 0 0 0 0 0 ...
# .. .. ..$ gear: num [1:32] 4 4 4 3 3 3 3 4 4 4 ...
# .. .. ..$ carb: num [1:32] 4 4 1 1 2 1 4 2 2 4 ...
# .. ..- attr(*, "class")= chr "AsIs"
# $ :'data.frame': 2 obs. of 2 variables:
# ..$ V1 : int [1:2] 1 2
# ..$ topics:List of 2
# .. ..$ :'data.frame': 32 obs. of 11 variables:
# .. .. ..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
# .. .. ..$ cyl : num [1:32] 6 6 4 6 8 6 8 4 4 6 ...
# .. .. ..$ disp: num [1:32] 160 160 108 258 360 ...
# .. .. ..$ hp : num [1:32] 110 110 93 110 175 105 245 62 95 123 ...
# .. .. ..$ drat: num [1:32] 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
# .. .. ..$ wt : num [1:32] 2.62 2.88 2.32 3.21 3.44 ...
# .. .. ..$ qsec: num [1:32] 16.5 17 18.6 19.4 17 ...
# .. .. ..$ vs : num [1:32] 0 0 1 1 0 1 0 1 1 1 ...
# .. .. ..$ am : num [1:32] 1 1 1 0 0 0 0 0 0 0 ...
# .. .. ..$ gear: num [1:32] 4 4 4 3 3 3 3 4 4 4 ...
# .. .. ..$ carb: num [1:32] 4 4 1 1 2 1 4 2 2 4 ...
# .. ..$ :'data.frame': 32 obs. of 11 variables:
# .. .. ..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
# .. .. ..$ cyl : num [1:32] 6 6 4 6 8 6 8 4 4 6 ...
# .. .. ..$ disp: num [1:32] 160 160 108 258 360 ...
# .. .. ..$ hp : num [1:32] 110 110 93 110 175 105 245 62 95 123 ...
# .. .. ..$ drat: num [1:32] 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
# .. .. ..$ wt : num [1:32] 2.62 2.88 2.32 3.21 3.44 ...
# .. .. ..$ qsec: num [1:32] 16.5 17 18.6 19.4 17 ...
# .. .. ..$ vs : num [1:32] 0 0 1 1 0 1 0 1 1 1 ...
# .. .. ..$ am : num [1:32] 1 1 1 0 0 0 0 0 0 0 ...
# .. .. ..$ gear: num [1:32] 4 4 4 3 3 3 3 4 4 4 ...
# .. .. ..$ carb: num [1:32] 4 4 1 1 2 1 4 2 2 4 ...
# .. ..- attr(*, "class")= chr "AsIs"
您的解决方案:
library(purrr)
map(datalist, ~ sapply(.x[["topics"]], NROW))
# [[1]]
# [1] 32 32
#
# [[2]]
# [1] 32 32