将多个列变为一个函数将为dplyr中结果列内的每个组件创建一个列表
我有一个包中的函数(TidySensus),我想通过管道使用它并进行变异。我创建了这个简单的模型来展示这种情况将多个列变为一个函数将为dplyr中结果列内的每个组件创建一个列表,r,dplyr,tidyverse,tidycensus,R,Dplyr,Tidyverse,Tidycensus,我有一个包中的函数(TidySensus),我想通过管道使用它并进行变异。我创建了这个简单的模型来展示这种情况 library(tidycensus) tt <- as_data_frame(matrix(1:36, ncol = 6)) colnames(tt) <- c("A", "B", "C", "D", "E", "F") tt2 <- tt %>% mutate(moe=moe_prop(.[,"A"],.[,"C"], .[,"D"],.[,"B"]))
library(tidycensus)
tt <- as_data_frame(matrix(1:36, ncol = 6))
colnames(tt) <- c("A", "B", "C", "D", "E", "F")
tt2 <- tt %>% mutate(moe=moe_prop(.[,"A"],.[,"C"], .[,"D"],.[,"B"]))
库(tidycensus)
tt基于输入数据集,假设我们每行只需要一个值,在每行上执行moe_prop
,将列名转换为符号,然后进行计算(!!!
)
或者执行rowwise()操作
tt %>%
rowwise %>%
mutate(moe = moe_prop(A, C, D, B))
通过单独检查行值
moe_prop(1, 13, 19, 7)
#[1] 1.460951
moe_prop(2, 14, 20, 8)
#[1] 1.426237
您可以使用unest()
库(dplyr)
图书馆(tidyr)
图书馆(tidycensus)
tt#A tibble:36 x 7
#>A B C D E F moe
#>
#> 1 1 7 13 19 25 31 1.46
#> 2 1 7 13 19 25 31 1.43
#> 3 1 7 13 19 25 31 1.39
#> 4 1 7 13 19 25 31 1.37
#> 5 1 7 13 19 25 31 1.34
#> 6 1 7 13 19 25 31 1.31
#> 7 2 8 14 20 26 32 1.46
#> 8 2 8 14 20 26 32 1.43
#> 9 2 8 14 20 26 32 1.39
#> 10 2 8 14 20 26 32 1.37
#> # ... 还有26行
由(v0.2.0.9000)于2018年9月12日创建。非常感谢。这真是太棒了。但是如果我想直接给出列的名称呢?在我的实际问题中,输入列的名称在不同的运行中是不同的,因为它们的编号也可能不同,因此列索引可能会改变,所以每次我有一组列名时。@BobbyF,添加了另一个选项,这会有点慢。在第一种情况下,我们直接转换列名。唯一的问题是我做这件事比较容易。相反,你可以做tt%>%的变异(moe=moe_prop(!!!rlang::syms(c(“A”,“c”,“D”,“B”)))
噢,对了!!我想是基本的R。完全忘记了。非常感谢。
tt %>%
mutate(moe = moe_prop(!!! rlang::syms(c("A", "C", "D", "B"))))
tt %>%
rowwise %>%
mutate(moe = moe_prop(A, C, D, B))
moe_prop(1, 13, 19, 7)
#[1] 1.460951
moe_prop(2, 14, 20, 8)
#[1] 1.426237