当前位置: 首页 > 知识库问答 >
问题:

传递具有要变异的名称的向量以创建多个新列

应子真
2023-03-14

下面是我的可复制代码:

library(dplyr)
library(tibble)

correct = c(4, 5, 2, 2, 2, 3, 3, 5, 4, 5, 2, 1, 3, 4, 2, 2, 2, 4, 3, 1, 1, 5, 4, 1, 3, 2)

sub1 = c(3, 5, 1, 5, 4, 3, 2, 5, 4, 3, 4, 4, 4, 1, 5, 1, 4, 3, 3, 4, 3, 2, 4, 2, 3, 4)

df = t(data.frame(sub1))
colnames(df) = paste0("P", 1:26)

new_names = paste0("P", 1:26, "_coded")

for(i in 1:26){


  df = as.tibble(df) %>% 
    mutate(new_names = case_when(.[i] == correct[i] ~ 1, 
                     .[i] != correct[i] ~ 0, 
                     T ~ 9999999))

  print(df) # to know what's going on.

}

另外,我知道.dots可以接收矢量中的名称(我想),但我不太理解如何在mutate()中与case_when一起使用。

也欢迎使用recoded值创建新列的其他方法

更新:我的预期输出将是包含26个新列的原始数据帧,p1_cod:p26_cod,可能包含值1(如果正确)和0(如果不正确)。

类似这样的内容(我刚刚创建了4个列,其中有1和0作为示例)。

df %>% 
  mutate(P1_COD = 1,
         P2_COD = 0,
         P3_COD = 1,
         P4_COD = 1)

共有1个答案

管杜吟
2023-03-14

数据的格式不是dplyr最适合处理的格式。我建议将数据重组为纵向格式,然后case_when变得很简单,不需要for循环。

有关tidyr的数据格式,请参阅TidyVerse.org文档中的其他文档

这里是包含示例数据的“纵向”格式的示例。我还添加了一些随机答案的其他科目。

library(tidyverse)
responses <- data_frame(
  subject = rep(1:3, each = 26),
  qNum = rep(1:26, 3),
  response = c(sub1, 
               sample(5, 26, replace = T),
               sample(5, 26, replace = T)))

可以创建并合并答案:

answers <- data_frame(
  qNum = 1:26,
  answer = correct)
df <- left_join(responses, answers)

接下来,使用dplyr::case_when为答案打分:

df <- df %>% mutate(score = case_when(response == answer ~ 1,
                                TRUE ~ 0))
# A tibble: 26 x 5
   subject  qNum response answer score
     <dbl> <int>    <dbl>  <dbl> <dbl>
 1       1     1        3      4     0
 2       1     2        5      5     1
 3       1     3        1      2     0
 4       1     4        5      2     0
 5       1     5        4      2     0
 6       1     6        3      3     1
 7       1     7        2      3     0
 8       1     8        5      5     1
 9       1     9        4      4     1
10       1    10        3      5     0
# ... with 16 more rows
df %>%
  select(-response, -answer) %>% 
  spread(qNum, score, sep = ".")
# A tibble: 3 x 27
  subject qNum.1 qNum.2 qNum.3 qNum.4 qNum.5 qNum.6 qNum.7 qNum.8 qNum.9 qNum.10
*   <int>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>   <dbl>
1       1      0      1      0      0      0      1      0      1      1       0
2       2      0      0      0      0      1      0      0      0      0       0
3       3      0      0      0      0      1      0      0      0      0       0
 类似资料:
  • 我有一个国家和年份级别的面板数据集,我想根据现有的变量创建两个新变量。 我想做的是创建两个新变量集:(1)每年(跨国家)平均值的变量集和(2)国家/地区值相对于年平均值的变量集。例如,对于 var1(1) 将产生 mean_var1 和 (2) relmean_var1我希望这些变量用于所有其他变量。总的来说,数据集中有超过1000个变量,但我只将此函数应用于大约6个。 我有适用于第一部分的代码,

  • 我正在为学校制作一种API,用于定制XML编写器。我有: 我需要帮助的是: 我想创建一个与数据[i]同名的元素。 我使用的是dom4jxml。顺便说一句,放在这个罐子里。 我听说过一种叫做hashmap的方法,如果这是正确的方法,请有人解释一下如何使用它。

  • 我想在一个数据帧中创建几个新的空变量,并在向量中指定变量名。如果我只指定了一个变量名,这是可行的,但如果指定了几个,就不行了。我尝试了一些以前的解决方案,但它们似乎在这种情况下不起作用,例如: < li >不硬编码变量名的dplyr > < li >传递带有要变异的名称的向量以创建多个新列 < li>dplyr - mutate:使用动态变量名 期望的输出将是: 我想知道我如何能使这个工作?

  • 我已经创建了一个类似上面的类,我希望能够使用相同的类使用'colour'作为这个类的替代,如下面。 有没有一种方法可以简单地创造出来?

  • 我正在做一个分配,对于其中一个方法,我希望每次调用该方法时都创建一个新的arraylist。 下面是我的方法 } 当我试图创建一个与java.lang.String id变量同名的ArrayList时,我得到了一个错误。但是,每次调用此方法时,我都希望创建一个ArrayList,该ArrayList的名称是id唯一的,以便以后可以使用它。例如,如果id是“Steve”,我可以将arrayList称

  • 问题内容: 我想用Python(不是数组)中的一个创建10个变量。像这样: 我想创建的变量名,在这种情况下: ,,,…, 我不想一个数组 我有一个坐标图(640 x 480)。我正在确定像素颜色为白色的坐标。地面上有3个球,我想获取每个球的中心坐标,因此,如果要评估的坐标距离最后一个球很近,则x和y坐标将被平均(如果该坐标属于a)新球的坐标将属于新坐标组。 问题答案: 您不应该这样做,但是如果您真