我有一个 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 Yes2 Yes3 Yes4
1 F3 不适用 不适用 M87
2 不适用 不适用 M87 不适用
3 不适用 F3 不适用 K17
4 不适用 不适用 F3 M87
根据 F3 对行进行子设置后,它应该是这样的;
行名 Var1 Yes2 Yes3 Yes4
1 F3 不适用 不适用 M87
3 不适用 F3 不适用 K17
4 不适用 不适用 F3 M87
所以相同的变量列被保留,但没有 F3 的行被删除
然后我希望根据它们在该子集中的常见程度列出其他变量(F3 除外),在这种情况下是
最常见:M87
第二常见:K17
如果有帮助,我正在尝试识别患有特定疾病的个体,然后我将尝试找出这些个体最常患有的其他疾病
谢谢您的帮助
如果您想使用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")))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句