gpt4 book ai didi

r - 如何循环遍历列,检查任何列中是否存在特定值,变异一个新列,如果存在则输入 1,如果不存在则输入 0?

转载 作者:行者123 更新时间:2023-12-01 22:43:41 25 4
gpt4 key购买 nike

我正在开展一个研究项目,其中一个表格的输入方式还不太适合分析,因此我正在尝试重新组织它。目前,每一行都是一个考生,每一列都是他们答错的问题,按升序输入。因此,对于第一行,对于第一、第二和第三列,条目可以分别读取“Q1”、“Q3”、“Q9”等。总共有 25 个问题。

我的目标是重新组织数据,以便每个问题都有一个列。如果考生正确回答了问题,则相应列的条目为 1,否则为 0。

有一种看似有效的蛮力方法。可以单独改变每列并检查每列中的每个值。然而,有 25 个问题,所有这些打字似乎效率极低,所以我怀疑一定有更好的方法。

暴力破解代码看起来像这样:

df %>%
mutate(Q3 == ifelse(col1 == "Q3" | col2 == "Q3" | col3 == "Q3", 0, 1))

这里,col1、col2、col3都是可能包含Q3的列,这可能是考生做错的问题。如果其中任何一个满足,我们输入 0。否则,我们输入 1。

有 25 个问题,代码变得太长。

编辑:数据帧的示例如下所示。

sample <- "ID   Col1  Col2  Col3  Col4
1 100 Q1
2 101 Q3 Q4
3 102 Q2 Q3 Q4
4 103
5 104 Q4
6 105 Q1 Q2 Q3 Q4 "

期望的输出如下:

sample <- "ID    Q1    Q2    Q3    Q4
1 100 0 1 1 1
2 101 1 1 0 0
3 102 1 0 0 0
4 103 1 1 1 1
5 104 1 1 1 0
6 105 0 0 0 0 "

最佳答案

这是我的解决方案 - 将数据从宽变为长,然后再返回

s <- reshape2::melt(sample, id.vars = "ID", value.name = "Q")
s$variable <- 1
s <- subset(s, complete.cases(s))
s <- reshape(s, idvar = "ID", timevar = "Q", direction = "wide")
s <- apply(s, 2, function(x) ifelse(is.na(x), 0, x))

关于r - 如何循环遍历列,检查任何列中是否存在特定值,变异一个新列,如果存在则输入 1,如果不存在则输入 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57996400/

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