首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tidyverse和R:如何在嵌套数据块中计数行

Tidyverse和R:如何在嵌套数据块中计数行
EN

Stack Overflow用户
提问于 2018-01-05 06:12:37
回答 2查看 8.9K关注 0票数 3

所以,我检查了多个帖子却什么也没找到。根据this的说法,我的代码应该能工作,但它不起作用。

目标:我想从本质上打印出主题的数量--在这个例子中,也就是这个tibble中的行数。

代码:

代码语言:javascript
复制
 data<-read.csv("advanced_r_programming/data/MIE.csv")

make_LD<-function(x){
  LongitudinalData<-x%>%
    group_by(id)%>%
    nest()
  structure(list(LongitudinalData), class = "LongitudinalData")
}

print.LongitudinalData<-function(x){
  paste("Longitudinal dataset with", x[["id"]], "subjects")

}

x<-make_LD(data)

print(x)

,这是我正在处理的数据集的头:

代码语言:javascript
复制
> head(x)
[[1]]
# A tibble: 10 x 2
      id                  data
   <int>                <list>
 1    14 <tibble [11,945 x 4]>
 2    20 <tibble [11,497 x 4]>
 3    41 <tibble [11,636 x 4]>
 4    44 <tibble [13,104 x 4]>
 5    46 <tibble [13,812 x 4]>
 6    54 <tibble [10,944 x 4]>
 7    64 <tibble [11,367 x 4]>
 8    74 <tibble [11,517 x 4]>
 9   104 <tibble [11,232 x 4]>
10   106 <tibble [13,823 x 4]>

输出:

代码语言:javascript
复制
[1] "Longitudinal dataset with  subjects"

我尝试过上述堆栈溢出帖子中的每一种可能的组合,但似乎都不起作用。

EN

回答 2

Stack Overflow用户

发布于 2018-01-05 06:23:47

以下是两种选择:

代码语言:javascript
复制
library(tidyverse)

# Create a nested data frame
dat = mtcars %>% 
  group_by(cyl) %>% 
  nest %>% as.tibble

cyl data 1 6 <tibble [7 x 10]> 2 4 <tibble [11 x 10]> 3 8 <tibble [14 x 10]>

代码语言:javascript
复制
dat %>% 
  mutate(nrow=map_dbl(data, nrow))

dat %>% 
  group_by(cyl) %>% 
  mutate(nrow = nrow(data.frame(data)))

cyl data nrow 1 6 <tibble [7 x 10]> 7 2 4 <tibble [11 x 10]> 11 3 8 <tibble [14 x 10]> 14

票数 5
EN

Stack Overflow用户

发布于 2022-02-24 15:58:54

在tidyverse中有一个特定的函数:n()

您可以简单地这样做:mtcars %>% group_by(cyl) %>% summarise(rows = n())

代码语言:javascript
复制
> mtcars %>% group_by(cyl) %>% summarise(rows = n())
# A tibble: 3 x 2
    cyl  rows
  <dbl> <int>
1     4    11
2     6     7
3     8    14

在更复杂的情况下,主题可能跨越多个行(“长格式数据”),您可以这样做(假设hp表示主题):

代码语言:javascript
复制
> mtcars %>% group_by(cyl, hp) %>% #always group by subject-ID last
+   summarise(n = n()) %>% #observations per subject and cyl
+   summarise(n = n()) #subjects per cyl (implicitly summarises across all group-variables except the last)
`summarise()` has grouped output by 'cyl'. You can override using the `.groups` argument.
# A tibble: 3 x 2
    cyl     n
  <dbl> <int>
1     4    10
2     6     4
3     8     9

请注意,最后一种情况下的n比第一种情况要小,因为有相同数量的cylhp的汽车现在被算作一个“主体”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48108153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档