【发布时间】:2018-07-17 04:37:43
【问题描述】:
数据:
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()
它像以前一样占用整个列集。
【问题讨论】:
-
你是什么意思,“它选择整个数据框”,这就是你告诉它要做的所有事情。您拥有的
select只是减少发送到rowSums的列数,而不是返回。如果您还想减少返回的列,请将select放在rowSums之外。 (顺便说一句:要么使用与您之前的问题相同的数据,要么发布示例数据。另外,请"accept" 回答您之前的问题,否则您会发现有些人不太愿意提供帮助。) -
@r2evans 接受了以前的答案。认为“赞成”意味着接受。
-
请添加一个可重现的示例以及您的预期输出,以便其他人轻松帮助您。
-
*已编辑 - 希望能更好地解释我想要做什么。
-
我试图将选定的新行打印到控制台,但我对 mutate 的理解已经偏离了……一英里。该解决方案确实像@maurits-Evers 概述的那样工作。