我将使用以下数据集来说明我的问题:
my_df <- data.frame(
a = 1:10,
b = 10:1
)
colnames(my_df) <- c("a", "b")
Run Code Online (Sandbox Code Playgroud)
第1部分
我使用该mutate()
函数在我的数据集中创建两个新变量,我想计算同一mutate()
调用中两个新列的行方式.但是,我真的希望能够使用select()
帮助器,如starts_with()
,ends_with()
或contains()
.
我的第一次尝试:
my_df %>%
mutate(
a_2 = a^2,
b_2 = b^2,
mean = rowMeans(select(ends_with("2")))
)
Error in mutate_impl(.data, dots) :
Evaluation error: No tidyselect variables were registered.
Run Code Online (Sandbox Code Playgroud)
我理解为什么会出现错误 - select()
函数没有给出任何.data
参数.所以我改变了代码......
...我.
在select()
函数内添加" "的第二次尝试:
my_df %>%
mutate(
a_2 = a^2,
b_2 = b^2,
mean = rowMeans(select(., ends_with("2"))) …
Run Code Online (Sandbox Code Playgroud) I have a dataframe df
:
userID Score Task_Alpha Task_Beta Task_Charlie Task_Delta
3108 -8.00 Easy Easy Easy Easy
3207 3.00 Hard Easy Match Match
3350 5.78 Hard Easy Hard Hard
3961 10.00 Easy NA Hard Hard
4021 10.00 Easy Easy NA Hard
1. userID is factor variable
2. Score is numeric
3. All the 'Task_' features are factor variables with possible values 'Hard', 'Easy', 'Match' or NA
Run Code Online (Sandbox Code Playgroud)
I want to create new columns per userID
that contain the counts of …
library(dplyr)
tib <- tibble(a = c(1,2,3))
Run Code Online (Sandbox Code Playgroud)
以下工作如预期:
tib %>% mutate(b = a^2, c = sqrt(b))
# A tibble: 3 x 3
a b c
<dbl> <dbl> <dbl>
1 1 1 1
2 2 4 2
3 3 9 3
tib %>% mutate(b = a^2, c = sum(a))
# A tibble: 3 x 3
a b c
<dbl> <dbl> <dbl>
1 1 1 6
2 2 4 6
3 3 9 6
tib %>% mutate(b = a^2) %>% mutate(c = sum(b)) …
Run Code Online (Sandbox Code Playgroud) 我一直在dplyr::mutate_at
尝试通过对某些列应用相同的函数来创建新变量。当我在参数中命名我的函数时.funs
,mutate 调用会创建带有后缀的新列,而不是替换现有列,这是我在此线程中发现的一个很酷的选项。
df = data.frame(var1=1:2, var2=4:5, other=9)
df %>% mutate_at(vars(contains("var")), .funs=funs('sqrt'=sqrt))
#### var1 var2 other var1_sqrt var2_sqrt
#### 1 1 4 9 1.000000 2.000000
#### 2 2 5 9 1.414214 2.236068
Run Code Online (Sandbox Code Playgroud)
但是,我注意到当vars
用于指向我的列的参数只返回一列而不是几列时,生成的新列会删除初始名称:它被命名sqrt
而不是在other_sqrt
这里:
df %>% mutate_at(vars(contains("other")), .funs=funs('sqrt'=sqrt))
#### var1 var2 other sqrt
#### 1 1 4 9 3
#### 2 2 5 9 3
Run Code Online (Sandbox Code Playgroud)
我想了解为什么会发生这种行为,以及如何避免它,因为我事先不知道contains()
将返回多少列。
编辑:新创建的列必须继承原始列的原始名称,加上末尾的后缀“sqrt”。
谢谢
我是这个网站的新手,也是编码的新手。我想知道你们中是否有人可以帮助我
我需要通过评分分布计算前 5 部电影,计算每部电影 4 星或更高评分的百分比。
到目前为止,我只能使用 dplyr 计算出现次数。
是否可以使用 dplyr (类似于我的编码)来计算它?
我不确定我是否需要变异来提出解决方案,或者是否有另一种方法可以这样做。
到目前为止我的代码:
dfAux1 <- na.omit(dfAux)
dfAux1 %>%
group_by(movie) %>%
summarise(tot = n()) %>%
arrange(desc(tot))%>%
head(5)
Run Code Online (Sandbox Code Playgroud)
结果应该是这样的:
**Expected result**:
0.7000000, 'The Shawshank Redemption'
0.5333333, 'Star Wars IV - A New Hope'
0.5000000, 'Gladiator'
0.4444444, 'Blade Runner'
0.4375000, 'The Silence of the Lambs'
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我的结果:
# A tibble: 5 x 2
movie tot
<fctr> <int>
1 Toy Story 17
2 The Silence of the Lambs 16
3 Star Wars IV - …
Run Code Online (Sandbox Code Playgroud) 目前我必须使用add_column
将新列直接插入到所需位置,或者使用mutate
, 然后select
使用新的所需列顺序。
mips.group <- str_extract(mips.manifest$PlateName, "[:alnum:]+_([[:alnum:]&&[^P]]+(_CL)?)?|(KORgex)")
mips.manifest %<>%
add_column(MIPSGroup=mips.group, .after="PlateName")
Run Code Online (Sandbox Code Playgroud)
是否可以直接告诉mutate
在哪里添加新列,如果没有,是否有原因?
我有一个数据集,我尝试使用if else语句基于不同的变量来更改某些变量的值。但是,我只想在满足特定条件时更改变量-否则我希望变量保持不变。如何在dplyr中执行此操作?
例如,如果我有4个站点(a,b,c和d),分别与10、20、30和40的值相关联,而我只想将站点a的10的值更改为12 。
df2 <- df %>%
mutate(lat = ifelse(site == "a", 12, WHAT GOES HERE?))
Run Code Online (Sandbox Code Playgroud) 我有一个小标题:
df = tibble(one = list('a', 'b'), two = list(c('p1', 'p2', 'p3'), NA_character_), three = list(NA_character_, c('z1', 'z2', 'z3')))
df
# A tibble: 2 x 3
one two three
<chr> <list> <list>
1 a <chr [3]> <chr [1]>
2 b <chr [1]> <chr [3]>
Run Code Online (Sandbox Code Playgroud)
我想替换丢失的值的列two
和three
与列的值one
使用coalesce()
,然后在折叠每个字符向量(横行)two
和three
成使用单个串toString()
。我的预期输出如下所示:
df = tibble(one = c('a', 'b'), two = list('p1, p2, p3', 'b'), three = list('a', 'z1, z2, z3'))
df
# A …
Run Code Online (Sandbox Code Playgroud) 我有以下代码,我正在计算数据点的百分比增长,然后我计算百分比增长的变化,我正在寻找的是能够添加一列,在其中计算百分比的读数数量增长变化为负
df <- data.frame(id = c(1,2,3,4,5,6,7,8,9,10,11,12), data = c(19, 19, 27, 27, 38, 42, 47, 48, 49, 50, 51, 53))
df <- mutate(df, pct_growth = (data - lag(data))/lag(data))
df <- mutate(df, pct_growth_change = pct_growth - lag(pct_growth))
df$pct_growth_streak <- 0
df <- dplyr::mutate(df, pct_growth_streak = ifelse(pct_growth_change <=0, lag(pct_growth_streak)+1,0) )
Run Code Online (Sandbox Code Playgroud)
我得到的输出如下
id data pct_growth pct_growth_change pct_growth_streak
1 1 19 NA NA NA
2 2 19 0.00000000 NA NA
3 3 27 0.42105263 0.4210526316 0
4 4 27 0.00000000 -0.4210526316 1
5 5 …
Run Code Online (Sandbox Code Playgroud) 我有一个由单个向量/列组成的数据:
my_tibble <- tibble(score = c(1,2,3,4,9,8,7,6,5,4))
Run Code Online (Sandbox Code Playgroud)
对于 my_tibble$score 的每一行,我想计算与同一列中最大的“领先”元素的差异。这个新列应称为“差异”。例如,差异的第一行应为 1 - 9,而第五行应为 9 - 8,最后一行将变为 NA,因为没有值落后/低于 4。
最后,新的 tibble 应如下所示:
score | difference
<dbl> <dbl>
1 -8
2 -7
3 -6
4 -5
9 1
8 1
7 1
6 1
5 1
4 NA
Run Code Online (Sandbox Code Playgroud)
我想使用 dplyr 来实现这一点,到目前为止已经尝试了许多 mutate 变体,例如
my_tibble %>%
mutate(difference = score[which(score > score)])
Run Code Online (Sandbox Code Playgroud)
希望找到某种方式,使 which 函数中的第二个“分数”指代正在发生变异的当前行。然而,经过数小时的尝试和拼命在网上寻找解决方案后,我没有成功。
我发现的最接近的是dplyr: Summing nleading values,但是这仍然给我留下了一个问题,即我想要与所有主值的最大主值的差异,而不仅仅是最接近的 n 个主值。
非常感谢之前已回答或解决此问题的任何地方的帮助和/或转介!