相关疑难解决方法(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添加多个值

关于dplyr Github repo已经存在一些问题,至少有一个相关的SO问题,但是没有一个问题完全覆盖了我的问题 - 我想.

这是我的用例:我想计算精确的二项式置信区间

dd <- data.frame(x=c(3,4),n=c(10,11))
get_binCI <- function(x,n) {
    rbind(setNames(c(binom.test(x,n)$conf.int),c("lwr","upr")))
}
with(dd[1,],get_binCI(x,n))
##             lwr       upr
## [1,] 0.06673951 0.6524529
Run Code Online (Sandbox Code Playgroud)

我可以完成这项工作,do()但我想知道是否有一种更具表现力的方式来做到这一点(感觉mutate() 可能有一个.n参数正在讨论总结() ...)

library("dplyr")
dd %>% group_by(x,n) %>%
    do(cbind(.,get_binCI(.$x,.$n)))

## Source: local data frame [2 x 4]
## Groups: x, n
## 
##   x  n        lwr       upr
## 1 3 10 0.06673951 0.6524529
## 2 4 11 0.10926344 0.6920953
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

在dplyr和mutate中使用strsplit和subset

我有一个包含一个字符串列的数据表.我想使用strsplit创建另一列作为此列的子集.

dat <- data.table(labels=c('a_1','b_2','c_3','d_4'))
Run Code Online (Sandbox Code Playgroud)

我想要的输出是

label  sub_label
a_1    a
b_2    b
c_3    c
d_4    d 
Run Code Online (Sandbox Code Playgroud)

我尝试过以下但似乎都没有效果.

dat %>%
    mutate(
        sub_labels=strsplit(as.character(labels), "_")[[1]][1]
    ) 
# gives a column whose values are all "a"
Run Code Online (Sandbox Code Playgroud)

这个对我来说合乎逻辑,

dat %>%
    mutate(
        sub_labels=sapply(strsplit(as.character(labels), "_"), function(x) x[[1]][1])
    )
Run Code Online (Sandbox Code Playgroud)

给出错误

错误:不知道如何处理类型的pairlist

我看到另一个文章,其中strsplit的输出上的粘贴崩溃工作,所以我不明白为什么匿名函数中的子集正在给出问题.感谢您对此的任何澄清.

r strsplit dplyr

9
推荐指数
4
解决办法
8020
查看次数

标签 统计

dplyr ×3

r ×3

strsplit ×1