如何在R中基于多变量对数据帧进行子集
我有一个286列157355行的数据帧。我希望对包含一个或多个已定义因子变量(如F32、F341等)的行进行子集划分。 完成后,我希望确定子集行中最常见的其他因子变量 我试图筛选感兴趣的值,但出现一条错误消息,指出数据必须是数字、逻辑或复杂的,例如如何在R中基于多变量对数据帧进行子集,r,dataframe,subset,R,Dataframe,Subset,我有一个286列157355行的数据帧。我希望对包含一个或多个已定义因子变量(如F32、F341等)的行进行子集划分。 完成后,我希望确定子集行中最常见的其他因子变量 我试图筛选感兴趣的值,但出现一条错误消息,指出数据必须是数字、逻辑或复杂的,例如 d<- a %>% filter_at(vars(f.41202.0.0:f.41202.0.65), all_vars('F32')) d% 过滤器(变量(f.41202.0.0:f.41202.0.65),所有变量('F32')
d<- a %>%
filter_at(vars(f.41202.0.0:f.41202.0.65), all_vars('F32'))
d%
过滤器(变量(f.41202.0.0:f.41202.0.65),所有变量('F32'))
我也试过了,但是结果数据帧没有值
f <- a %>%
rowwise() %>%
filter(any(c(1:280) %in% c('F32', 'F320', 'F321', 'F322', 'F323',
'F328', 'F329', 'F330', 'F331', 'F332',
'F333', 'F334', 'F338', 'F339')))
f%
行()
%c('F32','F320','F321','F322','F323',中的任何(c(1:280)%,
‘F328’、‘F329’、‘F330’、‘F331’、‘F332’,
‘F333’、‘F334’、‘F338’、‘F339’))
当我试图将所有相关变量放入ICD对象时,也发生了同样的情况
f <- b %>%
rowwise() %>%
filter(any(c(1:286) %in% ICD))
f%
行()
过滤器(任何(c(1:286)%ICD)
如果有任何建议,我将不胜感激,谢谢
我的数据看起来是这样的(很抱歉,我找不到一种方法在这个页面上更好地格式化它)
Row.name Var1 Var2 Var3 Var4
1 F3 NA NA M87
2 NA NA M87 NA
3钠F3钠K17
4 NA NA F3 M87
基于F3子设置行后,应如下所示
Row.name Var1 Var2 Var3 Var4
1 F3 NA NA M87
3钠F3钠K17
4 NA NA F3 M87
因此保留相同的变量列,但删除不带F3的行
然后,我希望根据其他变量在该子集中的常见程度列出其他变量(F3除外),在本例中是
最常见的:M87
第二常见:K17
如果这有帮助的话,我将尝试识别出患有某种特定疾病的个体,然后我将尝试找出这些个体最常见的其他疾病
感谢您的帮助如果您想使用
tidyverse
,您可以使用filter\u all
查看所有列。然后,检查诊断代码向量中是否有任何变量。在我的例子中,我看F3和F320
之后,如果要统计诊断代码的数量,可以将数据从宽改为长,然后统计频率。如果愿意,可以通过过滤器删除NA
。让我知道这是否是你的想法
df <- data.frame(
Var1 = c("F3", NA, NA, NA),
Var2 = c(NA, NA, "F3", NA),
Var3 = c(NA, "M87", NA, "F3"),
Var4 = c("M87", NA, "K17", "M87")
)
library(tidyverse)
df %>%
filter_all(any_vars(. %in% c("F3", "F320"))) %>%
pivot_longer(cols = starts_with("Var"), names_to = "Var", values_to = "Code") %>%
filter(!is.na(Code)) %>%
count(Code, sort = TRUE)
旁注:如果您希望仅基于部分变量进行筛选(而不是选择所有变量),则可以使用位于的filter\u,例如:
filter_at(vars(starts_with("Var")), any_vars(. %in% c("F3", "F320")))
为了澄清,请分享您的数据框架的有限部分以及您期望的结果:谢谢!这正是我想要的,它工作得非常好
# A tibble: 3 x 2
Code n
<fct> <int>
1 F3 3
2 M87 2
3 K17 1
filter_at(vars(starts_with("Var")), any_vars(. %in% c("F3", "F320")))