- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
% -6ren">
我正在尝试创建一个新列,其中将包含对 tibble 的列的子集按行进行计算的结果, 并将此新列添加到现有的 tibble。像这样:
df <- tibble(
ID = c("one", "two", "three"),
A1 = c(1, 1, 1),
A2 = c(2, 2, 2),
A3 = c(3, 3, 3)
)
我实际上想从 base R 做一个 dplyr 等效的代码:
df$SumA <- rowSums(df[,grepl("^A", colnames(df))])
我的问题是这不起作用:
df %>%
select(starts_with("A")) %>%
mutate(SumA = rowSums(.))
# some code here
...因为我去掉了“ID”列,以便让 mutate 在其他(数字)列上运行 rowSums。我曾尝试在 mutate 之后在管道中使用 cbind 或 bind_cols,但它不起作用。 mutate 的所有变体都不起作用,因为它们就地起作用(在 tibble 的每个单元格内,而不是跨列,即使是按行)。
这确实有效,但并不是一个优雅的解决方案:
df %>%
mutate(SumA = rowSums(.[,grepl("^A", colnames(df))]))
是否有任何基于 tidyverse 的解决方案不需要 grepl 或方括号,而只需要更标准的 dplyr 动词和参数?
我的预期输出是这样的:
df_out <- tibble(
ID = c("one", "two", "three"),
A1 = c(1, 1, 1),
A2 = c(2, 2, 2),
A3 = c(3, 3, 3),
SumA = c(6, 6, 6)
)
最佳千焦
最佳答案
这是使用 purrr::pmap
在 tidyverse
中进行逐行计算的一种方法。这最好与实际需要逐行运行的函数一起使用;简单的添加可能会以更快的方式完成。基本上,我们使用 select
向 pmap
提供输入列表,这让我们可以使用 select
帮助程序,例如 starts_with
或 匹配
如果您需要正则表达式。
library(tidyverse)
df <- tibble(
ID = c("one", "two", "three"),
A1 = c(1, 1, 1),
A2 = c(2, 2, 2),
A3 = c(3, 3, 3)
)
df %>%
mutate(
SumA = pmap_dbl(
.l = select(., starts_with("A")),
.f = function(...) sum(...)
)
)
#> # A tibble: 3 x 5
#> ID A1 A2 A3 SumA
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 one 1 2 3 6
#> 2 two 1 2 3 6
#> 3 three 1 2 3 6
由 reprex package 创建于 2019-01-30 (v0.2.1)
关于r - 在列的子集上使用 mutate rowwise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54450723/
简单的问题,但不知道为什么: 输入 Eigen::MatrixXd Ha(2, 3); Ha << 1, 2, 3, 4, 5, 6; std::cout << "Ha: " << std::endl
我有一个包含多列的数据框,我创建了一个新列,该列从其他列中的任一列中随机采样一个值。我如何回溯以判断该值来自哪一列? 我见过完全相同的问题和解决方案 here ,但它在 python 中,找不到 R
我想将两个向量合并到一个数据集中,并将其与函数 mutate 集成为 5 个新列到现有数据集中。这是我的示例代码: vector1% rowwise()%>% mutate(vector2|>
我再次对如何实现这一目标感到困惑: 鉴于此数据框: df 1 1 1 0 2 2 0 1 1 1 3 1
我正在尝试创建一个新列,其中将包含对 tibble 的列的子集按行进行计算的结果, 并将此新列添加到现有的 tibble。像这样: df % select(starts_with("A")) %>%
我有这个 df: df 1 1 6 11 a 1 2 2 7 12 b 2 3 3 8 13
我有一个数据: df_1 % select(-y) %>% rowwise() %>% mutate(var = sum(c(x.1, x.3))) 但是,以下函数(对于所有变量)不起作用
这是我之前问过的问题,但我用错误的方式解释了它,所以我将再次打开一个新问题。感谢您的帮助和时间! 数据输入: df=pd.DataFrame({'variable':["A","A","B","B",
我正在处理如下所示的数据框,并想计算 A 列中某些模式(“B”和“C”)的出现次数。 使用 rowwise、mutate 和 grepl 的代码确实有效,但使用 rowwise 的速度非常慢。我想知道
我有一个数据框,想使用 dplyr 的逐行计算每行中零的数量。我做错了什么? dt2 = data.frame(A = c(8, 6), B = c(0, 0), C = c(0, 5)) dt2 z
我正在尝试对具有字符向量作为列表元素的列表变量执行集合操作(相交、联合、setdiff、setequal)。例如, library(dplyr) list1 = list(c('a', 'b'),
我尝试使用 mutate 和 rowwise 返回一个列表,但出现代码中显示的错误。这些问题Q1 Q2有帮助,但我想通过使用 rowwise() 迭代行来保持简单,并且问题已经有 3 年 7 个月了。
你好:谁能提供一个外行的解释,为什么这两种尝试计算行平均值的方法不同? 谢谢。 library(tidyverse) var1% select(starts_with('var')) %>%
因此,如果希望在 dplyr 中逐行应用操作,可以使用 rowwise函数,例如:Applying a function to every row of a table using dplyr? 有没
我有下面的 tibble,我想从中创建第 4 列,它是来自 A、B 和 C 的联合向量。我知道 dplyr::unite() 可以创建一个新的字符向量,但我正在寻找创建一个带有向量的列表列。 现在 r
我有一个像这样的 Pandas 数据框: df = pd.DataFrame({'A': [2, 3], 'B': [1, 2], 'C': [0, 1], 'D': [1, 0], 'total':
我在使用 rowwise() 计算每行中的 NA 数量时遇到问题。我的最小例子: df % rowwise() %>% mutate(Count_NA = sum(is.na(.))) #
这在某种程度上与此question有关: 原则上,我尝试了解使用多于1种功能(如(rowwise,mutate,mean()等)的多列sum()的min()操作是如何工作的。 我了解到across可以
这个问题已经有答案了: Pandas conditional creation of a series/dataframe column (13 个回答) Create new column base
我尝试将 rowwise 和 mutate 与可以返回 NA 值的函数一起使用,但出现错误。考虑这个人为的示例(这显然不是 rowwise 的情况,但说明了错误): 这有效: library(dply
我是一名优秀的程序员,十分优秀!