选择具有rowSums的行并使用dplyr错误进行突变

时间:2018-07-17 04:37:43

标签: r dplyr

数据:

head(well_being_df2)
# A tibble: 6 x 70
Age Gender  EmploymentStatus PWI1   PWI2   PWI3   PWI4   PWI5  PWI6 PWI7 Personality1 Personality2 Personality3  
<dbl> <dbl+l> <dbl+lbl>     <dbl+> <dbl+> <dbl+> <dbl+> <dbl> <dbl>  <dbl> <dbl+lbl>    <dbl+lbl>    

我正在选择列的子集并尝试对其进行突变。我玩过 here提供的解决方案周围,但出现各种错误。我试图选择PWI列,然后将rowSums突变为一个名为PWI_Index的新变量。

这有效:

rowSums(select(well_being_df2, contains("PWI")))

[1] 50 32 48 32 58 52 41 51 49 37 50 53 58 47.... 
[38] 58 60 63 60 63 56 43 30 45 53 45 44 57 55.... 
[75] 50 55 57 58 57 58 58 58 62 62 44 59 58....

但是当我尝试变异时:

mutate(well_being_df2, x = rowSums(select(well_being_df2, 
contains("PWI"))))

哪个输出/选择整个列集而不是“ PWI”列。示例:

# A tibble: 169 x 71
 Age Gender  EmploymentStatus PWI1   PWI2   PWI3   PWI4  PWI5  PWI6  PWI7  Personality1 Personality2 Personality3
 <dbl> <dbl+l> <dbl+lbl>        <dbl+> <dbl+> <dbl+> <dbl> <dbl> <dbl> <dbl> <dbl+lbl>    <dbl+lbl>    <dbl+lbl>   
 1  22   2       3                8      8      6      8     8     6    6     1            1            1    

 2  20   2       1                4      6      1      8     8     4     1     4            5            4           

它选择整个数据帧,而不是“ PWI”的选定行总和。使用[.4:10]也不起作用。任何其他解决方案,我得到以下错误:

select(well_being_df2[.4:10]) %>%
mutate(PWI_Index = rowSums(.)) %>% left_join(well_being_df2)

Error: Column indexes must be integer, not 0.11, 1.11,...

加上以下示例的工作:

well_being_df2 %>%
 mutate(x = rowSums(select(., contains("PWI")))) %>%
 head()

和以前一样,它需要整个列集。

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解(或可以重现)您的问题。

以下是使用iris数据的示例,效果很好。

iris %>%
    mutate(x = rowSums(select(., contains("Width")))) %>%
    head()
#  Sepal.Length Sepal.Width Petal.Length Petal.Width Species   x
#1          5.1         3.5          1.4         0.2  setosa 3.7
#2          4.9         3.0          1.4         0.2  setosa 3.2
#3          4.7         3.2          1.3         0.2  setosa 3.4
#4          4.6         3.1          1.5         0.2  setosa 3.3
#5          5.0         3.6          1.4         0.2  setosa 3.8
#6          5.4         3.9          1.7         0.4  setosa 4.3

您可以看到xSepal.WidthPetal.Width列的总和,与

相同
rowSums(select(iris, contains("Width"))) %>% head()
#[1] 3.7 3.2 3.4 3.3 3.8 4.3