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