我用伪代码更新了问题,以更好地解释我想做什么。
我有一个名为 df_sel 的data.frame,具有5064行和215列。
某些列(〜80)包含具有特定特征(药物)唯一标识符的整数。这些列的名称分别为“ meds_0_1”,“ meds_0_2”,“ meds_0_3”等,以及“ meds_1_1”,“ meds_1_2”,“ meds_1_3”。每列可能包含也可能不包含我要查找的任何整数值。
要查找特定的整数值,可以将某些分组为不同类型的药物,但可以针对特定的品牌名称进行编码。
| ?- number_matrix_lines([[1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1]], 1, NumberLines).
NumberLines = [machine_penalty(1,[1,1,1,1,1,1,1,1]), machine_penalty(2,[1,1,1,1,1,1,1,1]), machine_penalty(3,[1,1,1,1,1,1,1,1])]
yes
如果可以像上面的矢量格式那样查找一组药物,那将会很有帮助。
我想这样做:
metformin = 1140884600 # not grouped
sulfonylurea = c(1140874718, 1140874724, 1140874726) # grouped
一致地
IF [a specific row]
CONTAINS [the single integer value of interest]
IN [any of the columns within the df starting with "meds_0"]
A_NEW_VARIABLE_METFORMIN = 1 ELSE A_NEW_VARIABLE_METFORMIN = 0
我已经根据列名创建了一个向量:
IF [a specific row]
CONTAINS [any of multiple integer values of interest]
IN [any of the columns within the df starting with "meds_0"]
A_NEW_VARIABLE_SULFONYLUREA = 1 ELSE A_NEW_VARIABLE_SULFONYLUREA = 0
但是,尽管下面有一些建议,我仍然没有任何进一步的认识。
希望您能更好地理解我要做什么。
答案 0 :(得分:0)
对于列的选择,您可以通过使用正则表达式首先提取名称,然后使用select
:
library(stringr)
column_names <- names(df_sel) %>%
str_subset('^meds_0')
relevant_df <- df_sel %>%
select(column_names)
我不太了解您的变量的结构(如果它们是整数,逻辑等),所以我不确定如何继续,但是可能涉及到诸如跨所有列求和并删除不为0的那些,例如:
meds_taken <- rowSums(relevant_df)
df_sel_med_count <- df_sel %>%
add_column(meds_taken)
这时,您应该将初始df和相关数据放在一栏中,并且可以按主题,药物或任何您想要的方式进行汇总。
如果这还不够,请编辑您的问题以提供数据的相关样本(您可以使用dput
函数),我将编辑此答案以添加更多详细信息。
答案 1 :(得分:0)
首先,我想首先为R库推荐生物导体,因为听起来您可能正在研究生物学数据。现在是您的问题。
尽管tidyverse是最广泛接受和“简便”的方法,但在这种情况下,我建议使用“ lapply”,因为它非常快。正如您所说,从编程的角度来看,您的代码将变成一个简单的布尔值,但是我认为我们可以进一步。使用来自“ mtcars”的内置数据,
data(mtcars)
head(mtcars, 6)
target=6
#trues and falses for each row and column
rows=lapply(mtcars, function(x) x %in% target)
#Number of Trues for each column and which have more that 0 Trues
column_sums=unlist(lapply(rows, function(x) (sum(x, na.rm = TRUE))))
which(column_sums>0)
这将与其他数据类型一起使用,并在其中进行一些调整。