gpt4 book ai didi

r - 将特定列转置为 R 中的行

转载 作者:行者123 更新时间:2023-12-02 16:06:50 25 4
gpt4 key购买 nike

我需要将一些列值转换为特定行的行。

这是一个示例数据集:

df <- data.frame(
student_id = c(1,1,1,2,2,2),
question_id = c(10,11,12,20,21,22),
score = c(2,3,4,2,1,5),
A = c(NA,NA,1, NA,NA,1),
B = c(NA,NA,2, NA,NA,1),
C = c(NA,NA,1, NA,NA,3)
)

> df
student_id question_id score C E O
1 1 10 2 NA NA NA
2 1 11 3 NA NA NA
3 1 12 4 1 2 1
4 2 20 2 NA NA NA
5 2 21 1 NA NA NA
6 2 22 5 1 1 3

对于那些在 ABC 列中有值的行,我需要将这些值抓取到分数列中,然后添加后缀以定义 question_id。例如,第三行的分数是这三列(A、B、C)的总和。

我想要的输出如下。

> df
student_id question_id score
1 1 10 2
2 1 11 3
3 1 12_C 1
4 1 12_E 2
5 1 12_O 1
6 2 20 2
7 2 21 1
8 2 22_C 1
9 2 22_E 1
10 2 22_O 3

最佳答案

另一种选择是用 NA 替换求和的 score(即问题 12 和 22)。从那里您可以将 pivot_longerscore:Cvalues_drop_na 一起使用。然后将namescore的行转换为NA。最后合并 question_idname 列。

df %>%
mutate(score = ifelse(!is.na(A), NA, score)) %>%
pivot_longer('score':'C', values_drop_na = TRUE) %>%
mutate(name = na_if(name, 'score')) %>%
unite('question_id', c(question_id, name), na.rm = T)

#------
# A tibble: 10 x 3
student_id question_id value
<dbl> <chr> <dbl>
1 1 10 2
2 1 11 3
3 1 12_A 1
4 1 12_B 2
5 1 12_C 1
6 2 20 2
7 2 21 1
8 2 22_A 1
9 2 22_B 1
10 2 22_C 3

关于r - 将特定列转置为 R 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69199641/

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