Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.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中基于多变量对数据帧进行子集_R_Dataframe_Subset - Fatal编程技术网

如何在R中基于多变量对数据帧进行子集

如何在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')

我有一个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'))
我也试过了,但是结果数据帧没有值

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")))