首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于现有列创建多个新列(dplyr)

基于现有列创建多个新列(dplyr)
EN

Stack Overflow用户
提问于 2021-07-12 20:37:02
回答 2查看 40关注 0票数 1

我正在尝试自动创建变量来指示学生的答案(以l,m,f或g开头的变量)是否对问题(例如。以“test_”开头的变量)是否正确。即。例如,通过检查test_l1 == l1是否可以完成此操作。

除了使用索引之外,我不知道如何做到这一点,但它非常单调乏味,并创建了许多代码。

下面是一个模仿实际数据集结构的玩具数据集,它有4种不同的测试,每个测试有12个练习(test_l1 ~ test_l12,test_m1 ~ test_m12,test_f1~,test_g1~)和相应的学生回答(l1~l12,m1~m12,f1~,g1~)。我想创建48个变量,即correct_l1 ~ correct_l12、correct_m1~、correct_f1~等。)

df<-data.frame(test_l1 = c(1,0,0), test_l2=c(1,1,1), test_m1 = c(0,1,0), test_m2=c(0,1,1), l1=c(0,1,0), l2=c(1,1,1), m1=c(1,1,1), m2=c(0,0,1))

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-12 20:57:38

下面是一个你可以使用的tidyverse解决方案:

代码语言:javascript
复制
library(dplyr)

df %>%
  mutate(across(starts_with("test_"), ~ .x == get(sub("test_", "", cur_column())), 
                .names = '{gsub("test_", "answer_", .col)}'))

  test_l1 test_l2 test_m1 test_m2 l1 l2 m1 m2 answer_l1 answer_l2 answer_m1 answer_m2
1       1       1       0       0  0  1  1  0     FALSE      TRUE     FALSE      TRUE
2       0       1       1       1  1  1  1  0     FALSE      TRUE      TRUE     FALSE
3       0       1       0       1  0  1  1  1      TRUE      TRUE     FALSE      TRUE
票数 1
EN

Stack Overflow用户

发布于 2021-07-12 20:43:42

获取test_cols中的所有'test'列,从test_cols中删除字符串'test_'以获取要比较的相应列。

直接比较两个数据帧并创建新列。

代码语言:javascript
复制
test_cols <- grep('test', names(df), value = TRUE)
ans_cols <- sub('test_', '', test_cols)
df[paste0('correct_', ans_cols)] <- df[test_cols] == df[ans_cols]

df
#  test_l1 test_l2 test_m1 test_m2 l1 l2 m1 m2 correct_l1 correct_l2 correct_m1 correct_m2
#1       1       1       0       0  0  1  1  0      FALSE       TRUE      FALSE       TRUE
#2       0       1       1       1  1  1  1  0      FALSE       TRUE       TRUE      FALSE
#3       0       1       0       1  0  1  1  1       TRUE       TRUE      FALSE       TRUE

其中TRUE表示答案是正确的,FALSE表示答案是错误的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68347494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档