相关疑难解决方法(0)

在dplyr mutate_at调用中使用多个列的函数

我想使用dplyr mutate_at函数将函数应用于数据框中的多个列,其中函数输入直接应用的列以及数据帧中的另一列.

作为一个具体的例子,我想改变以下数据帧

# Example input dataframe
df <- data.frame(
    x = c(TRUE, TRUE, FALSE),
    y = c("Hello", "Hola", "Ciao"),
    z = c("World", "ao", "HaOlam")
)
Run Code Online (Sandbox Code Playgroud)

mutate_at调用类似于此

df %>%
mutate_at(.vars = vars(y, z),
          .funs = ifelse(x, ., NA))
Run Code Online (Sandbox Code Playgroud)

返回一个看起来像这样的数据框

# Desired output dataframe
df2 <- data.frame(x = c(TRUE, TRUE, FALSE),
                  y_1 = c("Hello", "Hola", NA),
                  z_1 = c("World", "ao", NA))
Run Code Online (Sandbox Code Playgroud)

所需的mutate_at呼叫类似于以下呼叫mutate:

df %>%
   mutate(y_1 = ifelse(x, y, NA),
          z_1 = ifelse(x, z, NA)) …
Run Code Online (Sandbox Code Playgroud)

r dplyr

47
推荐指数
2
解决办法
4万
查看次数

在dplyr mutate调用中添加多个列

我有一个带点分隔字符列的数据框:

> set.seed(310366)
> tst = data.frame(x=1:10,y=paste(sample(c("FOO","BAR","BAZ"),10,TRUE),".",sample(c("foo","bar","baz"),10,TRUE),sep=""))
> tst
    x       y
1   1 BAR.baz
2   2 FOO.foo
3   3 BAZ.baz
4   4 BAZ.foo
5   5 BAZ.bar
6   6 FOO.baz
7   7 BAR.bar
8   8 BAZ.baz
Run Code Online (Sandbox Code Playgroud)

我想将该列拆分为两个新列,其中包含点两侧的部分.str_split_fixed从包中stringr可以很好地完成这项工作.我的所有值肯定是用点分隔的两个部分,所以我可以这样做:

> require(stringr)
> str_split_fixed(tst$y,"\\.",2)
      [,1]  [,2] 
 [1,] "BAR" "baz"
 [2,] "FOO" "foo"
 [3,] "BAZ" "baz"
 [4,] "BAZ" "foo"
 [5,] "BAZ" "bar"
 [6,] "FOO" "baz"
 [7,] "BAR" "bar"
Run Code Online (Sandbox Code Playgroud)

现在我可以把cbind它放到我的数据框架上,但我想我会弄清楚如何在dplyr管道中做到这一点.首先,我认为mutate可以做到一个:

> tst %.% mutate(parts=str_split_fixed(y,"\\.",2))
Error: wrong …
Run Code Online (Sandbox Code Playgroud)

r dplyr

20
推荐指数
1
解决办法
9857
查看次数

在group_by之后的dplyr mutate中的列上的函数未给出正确的分组结果

我刚开始使用dplyr并且已经将我的一些plyr代码转换过来了.我喜欢新的语法,但是我无法让mutate()在一个列上逐列应用函数,例如:

library(Hmisc)
library(plyr)
library(dplyr)

t1 <- ddply(mtcars, .(cyl), transform, qrt=cut2(wt, g=4))  
levels(t1$qrt)  # works: different quartiles for each group

t2 <- mtcars %>% group_by(cyl) %>% mutate(qrt=cut2(wt, g=4))  
levels(t2$qrt)   # doesn't work: uses only 4 quartiles from the first group
Run Code Online (Sandbox Code Playgroud)

起初我认为第二个例子是使用整个wt列而不是cyl组,但它实际上似乎只使用第一组的四分位数并将它们分配给所有组,即使在wt范围之外.

我是否错过了wtmutate函数内部引用的一些语法?我可以让ddply版本适用于像sum()这样的函数,所以有什么东西cut2()导致问题吗?

我已经阅读了很多关于可能类似问题的帖子,并尝试在没有ddply加载的干净环境中运行dplyr版本等等.

谢谢你的帮助!

r dplyr

5
推荐指数
1
解决办法
533
查看次数

用dplyr引导置信区间

这里查看答案 如何估计自举间隔?ggplot2列表上也提出了这个问题。

library(dplyr)
mtcars %>%
group_by(vs) %>%
summarise(mean.mpg = mean(mpg, na.rm = TRUE),
    sd.mpg = sd(mpg, na.rm = TRUE),
    n.mpg = n()) %>%
mutate(se.mpg = sd.mpg / sqrt(n.mpg),
 lower.ci.mpg = mean.mpg - qt(1 - (0.05 / 2), n.mpg - 1) * se.mpg,
 upper.ci.mpg = mean.mpg + qt(1 - (0.05 / 2), n.mpg - 1) * se.mpg)
Run Code Online (Sandbox Code Playgroud)

r confidence-interval dplyr

1
推荐指数
1
解决办法
1509
查看次数

标签 统计

dplyr ×4

r ×4

confidence-interval ×1