我有一个286列和157355行的数据框。我希望对包含几个定义的因子变量(例如F32,F341等)中的一个或多个的行进行子集化。 完成此操作后,我希望确定子集行中最常见的其他因子变量。
我尝试过滤感兴趣的值,但是出现一条错误消息,例如,数据必须是数字,逻辑或复杂的;
d<- a %>%
filter_at(vars(f.41202.0.0:f.41202.0.65), all_vars('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')))
当我尝试将所有相关变量放入ICD对象时,也会发生同样的情况
f <- b %>%
rowwise() %>%
filter(any(c(1:286) %in% ICD))
非常感谢您提出任何建议
我的数据看起来像这样(对不起,我在此页面上找不到更好的格式化方式);
行名Var1 Var2 Var3 Var4
1 F3 NA NA M87
2不适用不适用M87不适用
3 NA F3 NA K17
4 NA NA F3 M87
在基于F3的行设置之后,应该看起来像这样;
行名Var1 Var2 Var3 Var4
1 F3 NA NA M87
3 NA F3 NA K17
4 NA NA F3 M87
因此保留了相同的可变列,但删除了没有F3的行
然后我希望根据它们在子集中的普遍程度列出其他变量(F3除外),
最常见的:M87
第二个最常见的:K17
如果有帮助,我正在尝试识别患有某种疾病的人,然后我将尝试找出这些人最常患有哪些其他疾病
感谢您的帮助
答案 0 :(得分:0)
如果您想使用tidyverse
,则可以使用filter_all
查看所有列。然后,检查any_vars
是否在诊断代码的向量中。在我的示例中,我查看了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)
在过滤器之后,您应该具有:
Var1 Var2 Var3 Var4
1 F3 <NA> <NA> M87
2 <NA> F3 <NA> K17
3 <NA> <NA> F3 M87
在pivot_longer
和count
之后:
# A tibble: 3 x 2
Code n
<fct> <int>
1 F3 3
2 M87 2
3 K17 1
侧面说明:如果您希望仅基于部分变量进行过滤(而不是选择所有变量),则可以改用filter_at
,例如:
filter_at(vars(starts_with("Var")), any_vars(. %in% c("F3", "F320")))