如何在R中使用for循环方法生成包含行和列信息的表格

问题描述 投票:0回答:1

这只是我的数据集的快照。我有 12 个 org 对应 23 个不同的 abx.classes(例如青霉素、氨基糖苷类等)。我必须生成一个有 4 列的表; org,abx类,总数0(指耐药),总数1(指易感)。我需要使用循环方法来自动执行此操作(https://i.stack.imgur.com/hHjNM.png),而不是手动键入。应形成值为 0 或 1 的 org 和 abx.class 对。

enter image description here

df_long <- pivot_longer(filtered_mergedfinal, cols = c(Penicillins, Aminoglycosides, Trimethoprim, Macrolides, Lincosamides, Second_gen_cephalosporins,
第三代头孢菌素类、氟喹诺酮类、碳青霉烯类、甘氨酰环素类、第四代头孢菌素类、
多粘菌素、Beta_lactam_beta_lactamase_inhibitor、Monobactams、Amphenicols、Trimethoprim_sulfonamide、 四环素类、β_内酰胺类、 糖肽、恶唑烷酮、第一代头孢菌素、磺胺、类固醇)、 名称_to =“abx.class”,值_to =“suscept”) 结果2 <- df_long %>% group_by (org, abx.class, suscept) %>% 总结(频率=n())

柳叶刀<- na.omit(result2)

filtered_lancet <- lancet %>%过滤器(!grepl(“其他|污染物”,组织))

图书馆(tidyr)

扩大数据范围

transformed_lancet <- lancet %>%pivot_wider(names_from =“suscept”,values_from =“频率”,names_prefix =“suscept_”)

敏感数据<- na.omit(transformed_lancet)

错误: 我这样做了,但我需要使用循环方法,因为这会强制数据以我想要的方式显示。而不是使用带有所有参数的数据框来为我工作(提取所需的信息)。

r function loops for-loop basic
1个回答
0
投票

这是一个用于对数据进行建模的随机样本:

set.seed(1)
df1 <- cbind(org = sample(c("A","B", "C"), 10, T), as.data.frame(matrix(sample(c(0,1, NA), 100, T), 10)))

> df1
   org V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1    A NA NA  1  1 NA  0  0  0  1   1
2    C  0  0  0  0  1 NA  0  0  1   1
3    A  0  0 NA NA  1 NA  0  0  1   0
4    B  0  0  0  1  1  1 NA NA NA  NA
5    A  1  0 NA  0  1 NA  1  1  1  NA
6    C  1  1  1  0  0 NA NA  0  1   1
7    C  1  0  1 NA  1  1  0  0 NA  NA
8    B  1  0  1  1  1 NA  0 NA NA   1
9    B NA  1  1  1  1 NA  1 NA NA   0
10   C  0  1 NA NA  1  0  0 NA  0   1

...下面是循环,用于输出计数

result <- data.frame() # empty dataframe    
for (i in 2:ncol(df1)){
  loop_df <- as.data.frame(do.call(rbind,
          tapply(df1[,i], df1$org, \(x)
                 c(names(df1)[i], sum(x, na.rm=TRUE),
                   sum(x==0, na.rm = TRUE)
                       ))))
  loop_df$org <- rownames(loop_df)
  rownames(loop_df) <- NULL
  result <- rbind(result, loop_df)      
}

names(result)<- c("abx.class", "suscept_1", "suscept_0", "org")

结果是:

> result|>select(org, everything())
   org abx.class suscept_1 suscept_0
1    A        V1         1         1
2    B        V1         1         1
3    C        V1         2         2
4    A        V2         0         2
5    B        V2         1         2
6    C        V2         2         2
7    A        V3         1         0
8    B        V3         2         1
9    C        V3         2         1
10   A        V4         1         1
11   B        V4         3         0
12   C        V4         0         2
13   A        V5         2         0
14   B        V5         3         0
15   C        V5         3         1
16   A        V6         0         1
17   B        V6         1         0
18   C        V6         1         1
19   A        V7         1         2
20   B        V7         1         1
21   C        V7         0         3
22   A        V8         1         2
23   B        V8         0         0
24   C        V8         0         3
25   A        V9         3         0
26   B        V9         0         0
27   C        V9         2         1
28   A       V10         1         1
29   B       V10         1         1
30   C       V10         3         0
© www.soinside.com 2019 - 2024. All rights reserved.