gpt4 book ai didi

r - 使用 mutate() 将列添加到数据框中,作为任意一组其他列的函数

转载 作者:行者123 更新时间:2023-12-04 10:11:02 27 4
gpt4 key购买 nike

我有一个小问题。我需要添加一个新列,其中每个值都是其他几个列中相应值的函数。这是一个例子:

library(tibble)
tmp <- tribble(
~ID, ~x1, ~x2,
1, "200", NA,
2, "300", "400")

我想添加一个新列new,当且仅当x1x2 以“3”开头。也就是我要

# A tibble: 2 x 4
ID x1 x2 new
<dbl> <chr> <chr> <lgl>
1 1 200 <NA> NA
2 2 300 400 TRUE

在这个例子中,new 只是x1x2 的函数。但是这些“x”列可能有很多,我不会总是能写出它们的名字。不过,它们总是以“x”开头,所以这是一个解决方案:

tmp %>%
mutate(
new = select(., starts_with("x")) %>%
apply(., 1, function (x) any(substr(x, 1, 1)=="3"))
)

但是这个解决方案非常笨拙。有没有更优雅的方式?

Stack Overflow 上有很多相关问题,但它们通常针对以下情况:(a) 原始数据集中所有列的名称已知并且可以写出,或者 (b) new 变量是数据框中所有 其他列的函数。 (Here 就是一个例子。)

最佳答案

如果您想留在 tidyverse 中,我们可以使用 pmap 进行逐行操作:

library(dplyr)
library(purrr)

tmp %>%
mutate(new = pmap_lgl(select(., starts_with('x')),
~any(startsWith(c(...), '3'), na.rm = TRUE)))

# ID x1 x2 new
# <dbl> <chr> <chr> <lgl>
#1 1 200 NA FALSE
#2 2 300 400 TRUE

在 base R 中,我们可以按行使用 apply

tmp$new <- apply(tmp[grep('x', names(tmp))], 1, function(x) 
any(startsWith(x, '3'), na.rm = TRUE))

关于r - 使用 mutate() 将列添加到数据框中,作为任意一组其他列的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61334651/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com