gpt4 book ai didi

返回 R 中相关列中向量和字符串的最高值

转载 作者:行者123 更新时间:2023-12-04 11:20:29 25 4
gpt4 key购买 nike

我有多个项目的数据,其中每个项目由一组个人组成。我有关于他们的等级和性别的信息,如下所示:

df <- read.table(header = TRUE, text = 'Project GenderA RankA GenderB RankB GenderC RankC
100 1 3 0 1 1 2
200 1 2 1 2 NA NA
300 0 3 1 3 0 2
400 0 1 NA NA NA NA
500 1 1 0 2 1 1')

对于每个项目,我希望 R 创建一个新变量,该变量在团队中具有最高级别和该人的性别。
  Project GenderA RankA GenderB RankB GenderC RankC HighGen HighRank
100 1 3 0 1 1 2 1 3

我可以用 pmax 获得最高等级:
df<-cbind(df,
HighRank = pmax(df$RankA, df$RankB, df$RankC))

但这仅适用于完整(即没有 NA)且与性别列无关的项目。两者的最佳方法是什么?

最佳答案

这是一个固执的答案,但很难一次性完成的原因是您的数据不整洁。这意味着在这种情况下,您希望每一行都有一个观察结果。我使用 dplyr 给出了“整洁”的表示和解决方案包裹:

library(dplyr)

df <- read.table(header = TRUE, text = 'Project Gender Rank order
100 1 3 A
100 0 1 B
100 1 2 C
200 1 2 A
200 1 2 B
200 NA NA C
300 0 3 A
300 1 3 B
300 0 2 C')

df %>% group_by(Project) %>% arrange(-Rank) %>% slice(1) %>% ungroup()

为了解释最后一行,您按项目分组,按排名对这些项目中的所有分数进行排序,然后筛选第一个,最后,为了更好的衡量,您取消分组,这意味着您“忘记”了分组。您的输出是每个项目的最高得分记录,包括它的得分、性别。请注意,我还添加了一个新变量“order”,以反射(reflect)数据是在“rankA”或“rankB”等下评分的事实。

出去:
| Project| Gender| Rank|order |
|-------:|------:|----:|:-----|
| 100| 1| 3|A |
| 300| 0| 3|A |
| 200| 1| 2|A |

也可以将数据分离成整洁的表示,但您可能首先想看看您是如何输入数据的。整洁就是这样,但要广泛阅读,您可以查看 http://vita.had.co.nz/papers/tidy-data.pdf .

感谢 Gregor 的评论,这是一种将数据帧转换为更整洁表示的方法(使用包 tidyr )
library(tidyr)


df <- read.table(header = TRUE, text = 'Project GenderA RankA GenderB RankB GenderC RankC
100 1 3 0 1 1 2
200 1 2 1 2 NA NA
300 0 3 1 3 0 2
400 0 1 NA NA NA NA
500 1 1 0 2 1 1')

df %>% gather(key = key, value = value, -Project) %>% separate(key, into = c("variable", "order"), sep = -2) %>% spread(key = variable, value = value)

出去:
| Project|order | Gender| Rank|
|-------:|:-----|------:|----:|
| 100|A | 1| 3|
| 100|B | 0| 1|
| 100|C | 1| 2|
| 200|A | 1| 2|
| 200|B | 1| 2|
| 200|C | NA| NA|
| 300|A | 0| 3|
| 300|B | 1| 3|
| 300|C | 0| 2|
| 400|A | 0| 1|
| 400|B | NA| NA|
| 400|C | NA| NA|
| 500|A | 1| 1|
| 500|B | 0| 2|
| 500|C | 1| 1|

然后,您可以将其提供给第一部分中的公式以获得您的解决方案。

关于返回 R 中相关列中向量和字符串的最高值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41706594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com