Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:选择所有具有>;变量的5个条目_R - Fatal编程技术网

R:选择所有具有>;变量的5个条目

R:选择所有具有>;变量的5个条目,r,R,我有一个大的数据框(>100万个条目),用于±50000个不同的主题。所有受试者都有1-±20个条目,这取决于他们在研究中的时间长短。 我想制作一个新的数据帧,只包含>=5个测量值的对象,然后全部获取(因此,如果一个对象有10个测量值,我想要全部10个,如果有人有5个,我想要全部5个)。有很多缺少的数据,我不想要值==NA的行 我的数据的外观示例: subjid value 1 20 1 30 1 NA 1 20 1

我有一个大的数据框(>100万个条目),用于±50000个不同的主题。所有受试者都有1-±20个条目,这取决于他们在研究中的时间长短。 我想制作一个新的数据帧,只包含>=5个测量值的对象,然后全部获取(因此,如果一个对象有10个测量值,我想要全部10个,如果有人有5个,我想要全部5个)。有很多缺少的数据,我不想要值==NA的行

我的数据的外观示例:

subjid    value  
1         20
1         30
1         NA
1         20
1         40
1         45
2         20
2         30
3         NA
4         15
4         100
4         NA
4         100
4         130
4         150 
我需要什么作为输出

subjid    value  
1         20
1         30
1         20
1         40
1         45
4         15
4         100
4         100
4         130
4         150 
我对R比较陌生,如果您需要更多信息来回答,请询问!
谢谢

您可以选择具有5个以上非NA值的组

library(dplyr)
df %>% group_by(subjid) %>% filter(sum(!is.na(value)) >= 5 & !is.na(value))

#   subjid value
#    <int> <int>
# 1      1    20
# 2      1    30
# 3      1    20
# 4      1    40
# 5      1    45
# 6      4    15
# 7      4   100
# 8      4   100
# 9      4   130
#10      4   150
以及
数据。表

library(data.table)
setDT(df)[, .SD[!is.na(value) & sum(!is.na(value)) >= 5], subjid]

试试这个
dplyr
方法。首先按id分组,并筛选至少有5个值的组。然后移除
NA
。代码如下:

library(dplyr)
#Code
newdf <- df %>% group_by(subjid) %>% filter(n()>=5) %>%
  filter(!is.na(value))
库(dplyr)
#代码
newdf%group_by(subkid)%%>%filter(n()>=5)%%
过滤器(!is.na(值))
输出:

# A tibble: 10 x 2
# Groups:   subjid [2]
   subjid value
    <int> <int>
 1      1    20
 2      1    30
 3      1    20
 4      1    40
 5      1    45
 6      4    15
 7      4   100
 8      4   100
 9      4   130
10      4   150
#一个tible:10x2
#分组:subcid[2]
主体价值
1      1    20
2      1    30
3      1    20
4      1    40
5      1    45
6      4    15
7      4   100
8      4   100
9      4   130
10      4   150
使用的一些数据:

#Data
df <- structure(list(subjid = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 3L, 
4L, 4L, 4L, 4L, 4L, 4L), value = c(20L, 30L, NA, 20L, 40L, 45L, 
20L, 30L, NA, 15L, 100L, NA, 100L, 130L, 150L)), class = "data.frame", row.names = c(NA, 
-15L))
#数据
df这是否有效:

> subs
# A tibble: 15 x 2
   subjid value
    <dbl> <dbl>
 1      1    20
 2      1    30
 3      1    NA
 4      1    20
 5      1    40
 6      1    45
 7      2    20
 8      2    30
 9      3    NA
10      4    15
11      4   100
12      4    NA
13      4   100
14      4   130
15      4   150
> subs %>% na.omit() %>% group_by(subjid) %>% filter(n() > 4) %>% ungroup()
# A tibble: 10 x 2
   subjid value
    <dbl> <dbl>
 1      1    20
 2      1    30
 3      1    20
 4      1    40
 5      1    45
 6      4    15
 7      4   100
 8      4   100
 9      4   130
10      4   150
> 

分两步,使用
tidyverse
方法,首先收集具有5个或更多非NA值的受试者id:

subjects_to_take <- test %>%
  na.omit() %>%
  group_by(subjid) %>%
  summarise(n = n()) %>%
  filter(n >= 5) 
new_test <- test %>%
  filter(subjid %in% subjects_to_take$subjid) %>%
  na.omit()
subjects_to_take%
na.省略()%>%
分组依据(主题)%>%
总结(n=n())%>%
过滤器(n>=5)
然后提取非NA值:

subjects_to_take <- test %>%
  na.omit() %>%
  group_by(subjid) %>%
  summarise(n = n()) %>%
  filter(n >= 5) 
new_test <- test %>%
  filter(subjid %in% subjects_to_take$subjid) %>%
  na.omit()
new\u测试%
过滤器(subcid%在%subjects\u中,取$subcid)%>%
na.省略()