【发布时间】:2026-02-13 14:10:01
【问题描述】:
R 新手,将公式从 excel 转换为 R 时遇到问题。任何建议都会很棒。 我有一个名为 allwins_df 的数据框,我想将其中的每个值更改为列名的第一个字母。
然后我需要计算每个字母在每个日期的出现次数,并将它们从最高到最低的出现次数排列。最后,如果出现平局,则平局获胜者是基础数字最大的字母。即在 2001 年 1 月 5 日,其中一个 B 值的值高于 A 的值,因此 B 首先是 A,然后是 C。数据帧示例:
Date A.B A.C B.A B.C C.A C.B…
2001-01-01 N/A NA 0.14 0.35 0.43 NA
2001-01-02 0.8 NA NA 0.5 NA 0.32
2001-01-03 0.75 0.8 NA 0.65 NA 0.9
2001-01-04 NA 0.66 0.91 NA NA NA
2001-01-05 0.52 0.62 0.48 0.82 0.4 NA
在一些帮助下,我使用以下代码将值转换为字母,但不确定是否可以使用结果输出从出现次数最多到最少进行排名并处理平局。
cols <- sub("\\..*", "",names(allwins_df)[-1])
mat <- which(!is.na(allwins_df[-1]), arr.ind = TRUE)
allwins_df[-1][mat]<- allwins_df[-1][mat] <- cols[mat[, 2]]
上述代码的输出 - 仅将值更改为字母:
Date A.B A.C B.A B.C C.A C.B…
2001-01-01 N/A NA B B C NA
2001-01-02 A A NA B NA C
2001-01-03 A A NA B NA C
2001-01-04 NA A B NA NA NA
2001-01-05 A A B B C NA
最终目标输出示例:
Date
2001-01-01 B C
2001-01-02 A B C
2001-01-03 A C B
2001-01-04 B A
2001-01-05 B A C
提前致谢。
【问题讨论】:
-
在 2001-01-04 是否缺少 A?
-
2001-01-03 应该是“A C B”吗? B 和 C 都为 1,但 C 的值更高。
-
你是对的。已更新