mutate 相关问题

mutate是一个动词,用于在R编程语言中使用dplyr包在数据框中创建新列。

找到组内第一个 TRUE

我想保存每个id中level变量中第一个TRUE的位置。我正在执行以下操作: 图书馆(小标题) 图书馆(针织品) 库(kableExtra) 图书馆(tidyverse) 图书馆(lme4) 图书馆(

回答 1 投票 0

从许多列中相应的选定值中改变列名

让我们考虑一下标记及其变异系数 (cv) 和三个参考 cv (rcv): 初始数据: 标记 CV rcv1 rcv2 rcv3 让我们考虑 markers 及其变异系数 (cv) 和三个参考 cv (rcv): 初始数据: marker cv rcv1 rcv2 rcv3 <chr> <dbl> <dbl> <dbl> <dbl> 1 AAA 7 10 8 5 2 BBB 4 5 3 1 3 CCC 11 20 15 12 4 DDD 8 7 5 2 我想改变三个新变量: rcv_value:大于rcv的最接近的cv值 rcv_name:该rcv_value的列名称 cv_conclusion: 确定,如果 cv 低于 rcvs 中的一个或另一个 ko 如果 cv 高于最高 rcv 所需输出: marker cv rcv1 rcv2 rcv3 rcv_value rcv_name cv_conclusion <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr> 1 AAA 7 10 8 5 8 rcv2 ok 2 BBB 4 5 3 1 5 rcv1 ok 3 CCC 11 20 15 12 12 rcv3 ok 4 DDD 8 7 5 2 7 rcv1 ko 注意:我的真实数据有超过 100 个 markers 和大约 10 个不同的 rcv。 我失败的地方是从相应的rcv_name中获取rcv_value(使用mutate和case_when)。 感谢您的帮助。 数据: dat0 <- structure(list(marker = c("AAA", "BBB", "CCC", "DDD"), cv = c(7, 4, 11, 8), rcv1 = c(10, 5, 20, 7), rcv2 = c(8, 3, 15, 5), rcv3 = c(5, 1, 12, 2)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -4L)) 你可以试试这个: library(dplyr) dat0 %>% rowwise() %>% mutate(rcv_value = { x <- c_across(rcv1:rcv3) x[order(abs(x - cv), -x)][1] }) %>% ungroup() %>% mutate( rcv_name = do.call(coalesce, across(rcv1:rcv3, ~ ifelse(.x == rcv_value, cur_column(), NA))), cv_conclusion = ifelse(rcv_value >= cv, "ok", "ko") ) # # A tibble: 4 × 8 # marker cv rcv1 rcv2 rcv3 rcv_value rcv_name cv_conclusion # <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr> # 1 AAA 7 10 8 5 8 rcv2 ok # 2 BBB 4 5 3 1 5 rcv1 ok # 3 CCC 11 20 15 12 12 rcv3 ok # 4 DDD 8 7 5 2 7 rcv1 ko 在这种情况下,重新整形为长会让事情变得更加简单。首先使用tidyr::pivot_longer(),然后dplyr::mutate(.by = marker)按组执行这些操作,然后tidyr::pivot_wider()将数据恢复到原始形状。 library(dplyr) library(tidyr) dat0 |> pivot_longer( -c(marker, cv), names_to = "rcv" ) |> mutate( rcv_value = min(value[value > cv]), cv_conclusion = if_else(is.infinite(rcv_value), "ko", "ok"), rcv_value = if_else(is.infinite(rcv_value), max(value), rcv_value), rcv_name = rcv[rcv_value == value], .by = marker ) |> pivot_wider( id_cols = c(marker, cv, rcv_value, rcv_name, cv_conclusion), names_from = rcv, values_from = value ) |> select( # does not drop columns just changes order to specified one marker, cv, rcv1:rcv3, rcv_value:cv_conclusion ) # # A tibble: 4 × 8 # marker cv rcv1 rcv2 rcv3 rcv_value rcv_name cv_conclusion # <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr> # 1 AAA 7 10 8 5 8 rcv2 ok # 2 BBB 4 5 3 1 5 rcv1 ok # 3 CCC 11 20 15 12 12 rcv3 ok # 4 DDD 8 7 5 2 7 rcv1 ko 如果您可以为 rcv1:rcv3 列中的每个标记建立联系,则您必须指定您想要 rcv_name 说的内容。如果您只想要第一个值,您可以将该行更改为 rcv_name = rcv[rcv_value == value][1]。或者,您可以创建一个列表列来存储所有值,例如list(rcv[rcv_value == value]),或将它们粘贴在一起,例如rcv_name = paste(rcv[rcv_value == value], collapse = ",") 创建类似 "rcv2,rcv3" 的列。

回答 2 投票 0

如何从r中的许多列中相应的选定值中改变列名?

让我们考虑一下标记及其变异系数 (cv) 和三个参考 cv (rcv): 初始数据: 标记 CV rcv1 rcv2 rcv3 让我们考虑 markers 及其变异系数 (cv) 和三个参考 cv (rcv): 初始数据: marker cv rcv1 rcv2 rcv3 <chr> <dbl> <dbl> <dbl> <dbl> 1 AAA 7 10 8 5 2 BBB 4 5 3 1 3 CCC 11 20 15 12 4 DDD 8 7 5 2 我想改变三个新变量: rcv_value:大于rcv的最接近的cv值 rcv_name:该rcv_value的列名称 cv_conclusion: 确定,如果 cv 低于 rcvs 中的一个或另一个 ko 如果 cv 高于最高 rcv 所需输出: marker cv rcv1 rcv2 rcv3 rcv_value rcv_name cv_conclusion <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr> 1 AAA 7 10 8 5 8 rcv2 ok 2 BBB 4 5 3 1 5 rcv1 ok 3 CCC 11 20 15 12 12 rcv3 ok 4 DDD 8 7 5 2 7 rcv1 ko 注意:我的真实数据有超过 100 个 markers 和大约 10 个不同的 rcv。 我失败的地方是从相应的rcv_name中获取rcv_value(使用mutate和case_when)。 感谢您的帮助。 数据: dat0 <- structure(list(marker = c("AAA", "BBB", "CCC", "DDD"), cv = c(7, 4, 11, 8), rcv1 = c(10, 5, 20, 7), rcv2 = c(8, 3, 15, 5), rcv3 = c(5, 1, 12, 2)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -4L)) 在这种情况下,重新整形为长会让事情变得更加简单。首先使用 tidyr::pivot_longer(),然后使用 dplyr::group_by() 标记,然后使用 tidyr::pivot_wider() 将数据恢复到原始形状。 library(dplyr) library(tidyr) dat0 |> pivot_longer( -c(marker, cv), names_to = "rcv" ) |> mutate( rcv_value = min(value[value > cv]), cv_conclusion = if_else(is.infinite(rcv_value), "ko", "ok"), rcv_value = if_else(is.infinite(rcv_value), max(value), rcv_value), rcv_name = rcv[rcv_value == value], .by = marker ) |> pivot_wider( id_cols = c(marker, cv, rcv_value, rcv_name, cv_conclusion), names_from = rcv, values_from = value ) |> select( marker, cv, rcv1:rcv3, rcv_value:cv_conclusion ) # # A tibble: 4 × 8 # marker cv rcv1 rcv2 rcv3 rcv_value rcv_name cv_conclusion # <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr> # 1 AAA 7 10 8 5 8 rcv2 ok # 2 BBB 4 5 3 1 5 rcv1 ok # 3 CCC 11 20 15 12 12 rcv3 ok # 4 DDD 8 7 5 2 7 rcv1 ko

回答 1 投票 0

在 dplyr mutate 中使用自定义 case_when 函数

我已经查看了许多与我的问题相关的帖子,但我似乎无法弄清楚我的问题。 我有一个基本表,随着收集(NFL 赛季)的继续,该表将包含附加列。我无法...

回答 1 投票 0

改变 R 中以特定字母开头的列 - 将字符转换为数字

我有一个包含很多列的数据集。 其中大多数是数字,但也有一些是字符。尤其, 我有一个字符列“名称”,其中包含字符串元素(peo 的名称...

回答 1 投票 0

在 R 中,将列的值(按行)添加到任何名为日期的列(并将结果输出为日期)

我正在尝试编写简单的代码,使用 across() 将数据框列的值添加到另一列中的日期,以查找带有后缀“_date”的所有列。 例子...

回答 1 投票 0

基于 r 中一列或两列的年利率变化

我的数据如下所示 结构(列表(年份 = c(2017, 2017, 2017, 2017, 2018, 2018, 2018, 2018, 2019, 2019, 2019, 2019, 2017, 2017, 2018, 2018, 2019, 2019, 2017, 2017, 2017, 2017, 2018, 2018, 2018,

回答 1 投票 0

高效的 R 代码,根据同一数据帧中的相关行为数据帧中的每一行分配时间戳(年份)

我有一个客户交易数据集,需要基于一组相当复杂的“时间”规则创建一个新列(Vintage): 简而言之,要求是标记每个条目(ro...

回答 1 投票 0

如何根据 R 中每行中存在的缺失/NA 数量来计算一定数量的列中每行中有多少个 1?

我想创建一个新列“X11”,根据选定数量的列中有多少个 NA 有条件地对所有 1 求和。在本例中,我查看 4 个变量:...

回答 1 投票 0

创建一个新列,其中包含一组变量中某个变量出现的次数的计数

我有一张表格,其中包含珊瑚碎片 ID(包含物种和碎片编号)、治疗压力源(高和低)以及实验结果(活着 x 死亡)。 我想创建一个专栏,内容是...

回答 1 投票 0

R 中的自引用变异

你好,我正在尝试通过需要自引用过滤器的 mutate 操作来构建 tibble。 我的目标是获取该变量的所有可用值的最大值

回答 1 投票 0

将 `:=` 与 mutate 一起使用

我有以下代码块。我想确保将 := 与 mutate 一起使用是有效的,如以下两段代码所示。 我已经在这里咨询过,但不确定使用是否有效:=

回答 1 投票 0

是否有更紧凑的方式来编写管道变异调用链?

在 tidyverse 中,我经常发现我正在编写一长串 mutate 调用,... |> mutate(...) |> mutate(...) |> mutate(...) |> mutate( ...) |> ...有没有更紧凑的书写方式...

回答 1 投票 0

如何从列名重复的数据中提取数值数据?

我的原始数据中有重复的列名。我只想提取关键信息,例如“ansemis”和“mafruit”,保留一行列名,其余的

回答 1 投票 0

如何使用函数和 `across()` 将条件列突变为 `tibble`?

出于演示目的,我使用了名为 Animal_outcomes 的 tidytuesday 数据集。 我的问题:我的小标题中有几个数字列。我想改变一个新列,将所有列相加(除了...

回答 1 投票 0

修改变量的值

附完整数据: id = c (2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2) vm = c("12", "13", "14", "15", "16", "17", "18" "1...

回答 1 投票 0

创建条件变量

早上好, 附数据: id = c (2, 2, 2, 2, 2, 2, 2, 2, 2, 2), vm = c("13", "14", "15", "16", "17", "19", "20", "21&...

回答 1 投票 0

将 lubridate 应用于日期时间后,向数据帧添加新变量

我有一个带有 DateTime 变量的数据框 df1,但时间间隔并不完全在我需要的刻钟上,例如 2024-07-17 13:00:00。 我已使用 lubridate 将日期时间四舍五入为 15 分钟...

回答 1 投票 0

R 索引,过滤然后根据多个条件进行匹配。在 Excel 中很容易,在 R 中则不然

我想提取每个变量和weed_type的“未经处理的控制”值。在 Excel 中,很容易查找过滤器行中的值并返回该值的“untreatment_contol”结果

回答 1 投票 0

通过分组断点突变/剪切分组数据

我有两个数据框,每个数据框都有相同的组。第一个数据帧由基础数据组成,第二个数据帧由每组的独立断点集组成。我想使用这些断点...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.