数据:
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()
和以前一样,它需要整个列集。
答案 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
您可以看到x
是Sepal.Width
和Petal.Width
列的总和,与
rowSums(select(iris, contains("Width"))) %>% head()
#[1] 3.7 3.2 3.4 3.3 3.8 4.3