将此标记用于与dplyr包中的函数相关的问题,例如group_by,summarize,filter和select。
虽然有更多的列和观察结果,但我的数据框如下所示: dt <- data.frame(hid = c(1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4), syear = c(2000, 2001, 2003,
下面的示例演示了将对象传递给 deparse() 和 Replace() 会产生不同的输出,具体取决于对象是否使用 %>% 传递给函数以及
我在 R 中有一个名为 df 的数据框: A = c("好的","WA","WA","好的","WA") B = c("WB","好的","好的","好的","WB"...
我正在尝试计算单列中出现的次数。这是我正在使用的 df 的片段: 这是我到目前为止的代码: my_df$day <- weekdays(as.Date(my_df$deadline))
我正在使用 R 计算列中的简单比率并将这些值保存在另一个表中。在包含的 str 中看到的列是一月中的每一天和一月中每一天的每小时。对于
我想保存每个id中level变量中第一个TRUE的位置。我正在执行以下操作: 图书馆(小标题) 图书馆(针织品) 库(kableExtra) 图书馆(tidyverse) 图书馆(lme4) 图书馆(
我今天必须写一个这样的函数 数据1%>% 总结( ab1 = fn(a1, b1), ab2 = fn(a2, b2), ab3 = fn(a3, b3) ) # 想象一下如果有 100 个 如果 fn 是单个参数
我有一个像这样的数据框 图书馆(dplyr) 库(润滑) 票证 ID <- c("id_1234","id_2234","id_1334","id_1244","id_1294", ...
如何从“mutate”内的一个函数返回多列并允许我命名输出列?
考虑以下代码: 图书馆(dplyr) a = 数据.frame(a = 1:3) abc = \(x) data.frame(x/2, x/3) %>% 变异(abc(a)) 返回 x.2 x.3 1 1 0.5 0.3333333 2 2 1.0 0.6666667 3 3 1.5 1.
使用“leaflet”库,我制作了以下3张地图: #加载库 图书馆(dplyr) 图书馆(传单) 图书馆(地圈) 库(叶同步) 图书馆(地图视图) ##地图1 地图数据_1 <-...
我正在尝试将 .shp 文件(小区域多边形的 2644 个观测值)与 .csv 文件(其中一些小区域的每月数据的 7,760 个观测值)连接起来,以创建一个交互式
使用 dplyr 时 if_else(返回太长的向量)和 case_when 的区别
这是一个完全构建的示例。它只是为了理解概念上的差异。 我正在运行这段代码 图书馆(棕榈企鹅) 企鹅%>% group_by(物种) %>% 过滤...
我有以下数据表。 图书馆(dplyr) 图书馆(gt) df <- tibble( `model 2000` = c("a", "b"), `car 2022` = c("f", "d") ) I would ...
这里是初级 R 开发人员。我不太清楚 R 包依赖项中 LinkingTo 字段的含义。 我想做的是在安装后删除 BH 包...
df<- data.frame(x=c(1,2,3,4), y1=c('a','a',NA,NA), y2=c(NA,NA,'b','b')) x y1 y2 1 a 2个 3 a b --> a 和 b 具有相同的值 3 4 df <- data.frame(x=c(1,2,3,4), y1=c('a','a',NA,NA), y2=c(NA,NA,'b','b')) x y1 y2 1 a <NA> 2 a <NA> 3 a b --> a and b share the same value of 3 4 <NA> b 我正在尝试将 y1 和 y2 堆叠到新的 y 列中,以便 y1 和 y2 的每个非 NA 值都获得其相应的 x 值。 输出应如下所示: x y 1 a 2 a 3 a 3 b 4 b 3 重复出现,因为它同时出现在 a 和 b 中。 我尝试了 bind_rows 中的 dplyr,但它似乎仅适用于不同的数据帧。 你试试 reshape(df2, idvar="x", direction="long", varying=2:3, v.names="y") |> na.omit() |> subset(select=-time) 给予 x y 1.1 1 a 2.1 2 a 3.1 3 a 3.2 3 b 4.2 4 b 注意 输入更正: df2 = data.frame(x=c(1,2,3,4), y1=c('a','a','a',NA), y2=c(NA,NA,'b','b'))
让我们考虑一下标记及其变异系数 (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" 的列。
让我们考虑一下标记及其变异系数 (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
在 dplyr mutate 中使用自定义 case_when 函数
我已经查看了许多与我的问题相关的帖子,但我似乎无法弄清楚我的问题。 我有一个基本表,随着收集(NFL 赛季)的继续,该表将包含附加列。我无法...
我有一个类似的数据框 原始.df <- data.frame(id = c("X01", "X02", "X03", "X04", "X05", "X06", "X07", "X08", "...