- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含多列的数据框 (tibble),对于前两列之后的每一列,我想保留绝对值,但也插入相对于第二列的值。例如,我从以下数据框开始(列名可能不同!):
df = tibble(val1 = 5:10, val2 = 10:15, val3 = 15:20); df
# A tibble: 6 x 3
val1 val2 val3
<int> <int> <int>
1 5 10 15
2 6 11 16
3 7 12 17
4 8 13 18
5 9 14 19
6 10 15 20
现在,对于 val2
和 val3
列,我还想在 val2
之后和 val3< 之后插入一列
显示相对于 val1
的值。我该怎么做???
生成的小标题应如下所示:
dfrel = tibble(val1 = 5:10, val2 = 10:15, rel2 = val2/val1, val3 = 15:20, rel3 = val3/val1)
dfrel
# A tibble: 6 x 5
val1 val2 rel2 val3 rel3
<int> <int> <dbl> <int> <dbl>
1 5 10 2.00 15 3.00
2 6 11 1.83 16 2.67
3 7 12 1.71 17 2.43
4 8 13 1.62 18 2.25
5 9 14 1.56 19 2.11
6 10 15 1.50 20 2.00
不幸的是,我无法编写正确的 mutate_at 调用以在每个值列之后立即插入该相关列。事实上,我无法使用 funs() 编写一个 mutate_at,它通过访问其他列(按位置而不是名称)来修改列。
用相对值替换 val2 和 val3 可行(使用 lambda 函数而不是 funs),但不会按要求保留原始 val2 和 val3 列:
df %>%
mutate_at(vars(-1), function(v) v/.[[1]])
# A tibble: 6 x 3
val1 val2 val3
<int> <dbl> <dbl>
1 5 2.00 3.00
2 6 1.83 2.67
3 7 1.71 2.43
4 8 1.62 2.25
5 9 1.56 2.11
6 10 1.50 2.00
我所有使用 funs()
的尝试都失败了:
df %>%
mutate_at(vars(-1), funs(./.tbl[[1]]))
Error in mutate_impl(.data, dots) :
Evaluation error: object '.tbl' not found.
df %>%
mutate_at(vars(-1), funs(function(v) v/.[[1]]))
Error in mutate_impl(.data, dots) :
Column `val2` is of unsupported type function
与 Using functions of multiple columns in a dplyr mutate_at call 相比的一个并发症是我的 val1 列没有固定名称(即它并不总是称为 val1
),所以我不能在 funs 参数中按名称使用它。另一个复杂问题是 tibble 是动态创建的(使用大量管道运算符)并且通常不存储在变量中,所以我不能简单地除以 df[[1]]...
那么,在每列之后插入相关列(即第一列的百分比)的正确 dplyr 方法是什么?
最佳答案
通过将函数包装在列表中为您的函数命名,因此 mutate_at
将创建新列。类似于以下内容(列名称可能不太理想,因此您可能需要根据需要重命名它们):
df %>% mutate_at(vars(-1), list(rel = function(v) v / .[[1]]))
# A tibble: 6 x 5
# val1 val2 val3 val2_rel val3_rel
# <int> <int> <int> <dbl> <dbl>
#1 5 10 15 2.00 3.00
#2 6 11 16 1.83 2.67
#3 7 12 17 1.71 2.43
#4 8 13 18 1.62 2.25
#5 9 14 19 1.56 2.11
#6 10 15 20 1.50 2.00
关于r - 使用 mutate_at 在每列之后插入相对值(相对于 tibble 的第二列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49238842/
这个问题在这里已经有了答案: Combine a list of data frames into one data frame by row (9 个回答) 去年关闭。 我有一个很大的列表(200.
我想创建一个存储其他任意小标题的小标题列。 我通过以下代码设法做到了这一点,首先使用 nest()在每个内部 tibble 上然后使用 unnest()在外层 library(tibble) libr
我已尽我所能进行搜索,但仍在为我的问题而苦苦挣扎。我正在尝试根据另一个 tibble 的值对 tibble 中的列进行子集化。 更具体地说,我有一些社会经济指标: cname year ccod
我已尽我所能进行搜索,但仍在为我的问题而苦苦挣扎。我正在尝试根据另一个 tibble 的值对 tibble 中的列进行子集化。 更具体地说,我有一些社会经济指标: cname year ccod
我有两个问题,第一个是这个。 input_data # A tibble: 7 × 3 #> Genes Sample1 Sample2 #> #> 1 Ncr1
我有两个 tibbles,ranges 和 sites。第一个包含一组坐标(区域、开始、结束以及其他字符变量),另一个包含一个站点(区域、站点)。我需要获取第二个小标题中第一个小标题中给定范围(行)内
我正在使用 rtweet 包的 get_friends 函数来获取一组焦点用户的 friend 的 user_id 列表谁是从 Twitter 话语的参与者中抽样的。该函数返回一个 tibbles 列
我正在使用 rtweet 包的 get_friends 函数来获取一组焦点用户的 friend 的 user_id 列表谁是从 Twitter 话语的参与者中抽样的。该函数返回一个 tibbles 列
我想在以下代码中生成一个 tibble 列表。 tbl = tibble(id=1:10, a = rnorm(10), b = rnorm(10)) tbl_list = c("a", "b")
我有一个数据框,我需要添加一列以包含对应于现有数据框每一行的 3 个物种。希望下面的例子能说明问题: Site Year Trt A 2016 bowl A
我想用 df 中的 NA 替换 de 列,使用 df2 中的估算值来获得 df3 .我可以使用 left_join 和 coalesce 来做到这一点,但我认为这种方法不能很好地概括。有没有更好的办法
我想用 df 中的 NA 替换 de 列,使用 df2 中的估算值来获得 df3 .我可以使用 left_join 和 coalesce 来做到这一点,但我认为这种方法不能很好地概括。有没有更好的办法
假设我有一个嵌套的 tibble,格式如下: # A tibble: 3 x 3 AccountNumber Tibble1 Tibble2
在之前版本的 tidyr 中,我能够使用 tibble::add_row 将行添加到嵌套 tibble。更新到版本 1.0.0 后出现以下错误: Error: levels.vctrs_list_of
我编写了一个函数,其中一部分将矩阵转换为小标题。这在 tibble 1.4.2 中没有问题,但在 2.0.1 中会导致错误。 导致错误的代码如下 library(tibble) library(mag
我有这个列表列表: regions unnest(country) 在 base R 中,命名列表,并使用 stack : setNames(regions, seq_along(regions
我有一个问题: df % filter(! (x %>% map_lgl(~ sum(str_extract(df$x, .x) == .x, na.rm = TRUE) > 1))) #> # A
为了简化我的数据分析,我需要针对不同的变量和不同的数据组处理不同的统计测试(在该示例中为 shapiro 测试)。目的是不要写 150 次相同的代码。为此,我从我的数据集中创建了一个 tibble,其
我正在尝试通过对多个步骤进行采样来模拟一些数据。 第一步(创建 x)工作正常。 在第二步中,我想根据 x 的值从不同的向量中采样来创建变量 y。 我的代码运行没有错误,但在我试图实现的目标上失败了,因
我有一个像这样的嵌套列表: > ex ex [[1]] [[1]][[1]] [1] "This" "is" "an" "example" "." [[1]][[
我是一名优秀的程序员,十分优秀!