R table 函数:如何强制 table() 的列名输出顺序
R table function: how to coerce order of column names output of table()
我想更改 R 中 table 函数输出的列顺序。我只能找到有关 data.table 的操作列顺序的信息(不是我想要的)。当我使用 R(字母顺序?)时,列的顺序("No" 和 "Yes")始终保持一致,但由于某些原因,我的某些 table 又回到了不同的顺序("Yes" 和 "No")。我需要它们保持一致(因为我正在组合一些 tables)并进行排序,以便 "Yes" 排在最后。我正在制作数百个带有相关统计数据的 table,并且有一些定制的公式可以帮助我解决问题 - 但我负担不起仔细检查每个 table 的顺序 - 所以我想要告诉 R 具体要做什么。当我进行卡方检验时,我不想将每个 table 更改为 data.frame,对列重新排序,然后以某种方式更改回 table。 table 列的顺序很重要,因为我正在组合一些 table s(并且 R 错误地强制这些),并且还要计算比值比,所以我需要 "Yes" 始终排在最后。出于好奇(不必要),有人可以向我解释为什么我的一些数据按字母顺序生成 table 列,而其他数据却没有。我附上了我的数据的简化版本。
df <- data.frame(treatment = c("A","A","B","A","B","A","B","B"),
symptom = c("Yes","Yes","No","No","Yes","Yes","Yes","No"))
table(df)
由于此示例生成了我想要的 table 列顺序,请编写代码将列顺序从 "No"、"Yes" 更改为 "Yes"、"No"
我们可以使用 factor
并指定 levels
,因为 order
ing 基于字母顺序,其中 "N" 在 "Y" 之前(第一个字母等等)。这可以通过在自定义顺序中使用 levels
转换为 factor
来更改。
table(df$treatment, factor(df$symptom, levels = c("Yes", "No")))
# Yes No
# A 3 1
# B 2 2
或使用 transform
然后执行 table
table(transform(df, symptom = factor(symptom, levels = c("Yes", "No"))))
# symptom
#treatment Yes No
# A 3 1
# B 2 2
但是,我们可以在 table
之后通过指定顺序(列索引或列名)来执行此操作,但是如果我们不知道哪些是级别,这将变得更加乏味
table(df)[, 2:1]
# symptom
#treatment Yes No
# A 3 1
# B 2 2
您可以随意订购:
table(df)[,2:1]
symptom
treatment Yes No
A 3 1
B 2 2
table(df)[,c("Yes","No")]
symptom
treatment Yes No
A 3 1
B 2 2
levels=c("Yes","No")
table(df)[,levels]
symptom
treatment Yes No
A 3 1
B 2 2
我想更改 R 中 table 函数输出的列顺序。我只能找到有关 data.table 的操作列顺序的信息(不是我想要的)。当我使用 R(字母顺序?)时,列的顺序("No" 和 "Yes")始终保持一致,但由于某些原因,我的某些 table 又回到了不同的顺序("Yes" 和 "No")。我需要它们保持一致(因为我正在组合一些 tables)并进行排序,以便 "Yes" 排在最后。我正在制作数百个带有相关统计数据的 table,并且有一些定制的公式可以帮助我解决问题 - 但我负担不起仔细检查每个 table 的顺序 - 所以我想要告诉 R 具体要做什么。当我进行卡方检验时,我不想将每个 table 更改为 data.frame,对列重新排序,然后以某种方式更改回 table。 table 列的顺序很重要,因为我正在组合一些 table s(并且 R 错误地强制这些),并且还要计算比值比,所以我需要 "Yes" 始终排在最后。出于好奇(不必要),有人可以向我解释为什么我的一些数据按字母顺序生成 table 列,而其他数据却没有。我附上了我的数据的简化版本。
df <- data.frame(treatment = c("A","A","B","A","B","A","B","B"),
symptom = c("Yes","Yes","No","No","Yes","Yes","Yes","No"))
table(df)
由于此示例生成了我想要的 table 列顺序,请编写代码将列顺序从 "No"、"Yes" 更改为 "Yes"、"No"
我们可以使用 factor
并指定 levels
,因为 order
ing 基于字母顺序,其中 "N" 在 "Y" 之前(第一个字母等等)。这可以通过在自定义顺序中使用 levels
转换为 factor
来更改。
table(df$treatment, factor(df$symptom, levels = c("Yes", "No")))
# Yes No
# A 3 1
# B 2 2
或使用 transform
然后执行 table
table(transform(df, symptom = factor(symptom, levels = c("Yes", "No"))))
# symptom
#treatment Yes No
# A 3 1
# B 2 2
但是,我们可以在 table
之后通过指定顺序(列索引或列名)来执行此操作,但是如果我们不知道哪些是级别,这将变得更加乏味
table(df)[, 2:1]
# symptom
#treatment Yes No
# A 3 1
# B 2 2
您可以随意订购:
table(df)[,2:1]
symptom
treatment Yes No
A 3 1
B 2 2
table(df)[,c("Yes","No")]
symptom
treatment Yes No
A 3 1
B 2 2
levels=c("Yes","No")
table(df)[,levels]
symptom
treatment Yes No
A 3 1
B 2 2