gpt4 book ai didi

r - 基于在 R w/dplyr mutate() 中作为向量存储的列索引连接 data.frame 字符列?

转载 作者:行者123 更新时间:2023-12-05 05:13:14 27 4
gpt4 key购买 nike

能否根据存储为向量的列索引连接数据框列,可能使用 stringr 函数(例如,str_c() )或粘贴?然后,我该如何使用 dplyr mutate() 创建一个新变量?

我想为电子邮件聚合任务这样做,这意味着使用 readxl 包读取包含不同名称列(例如,只有一个名称列,有时是名字和姓氏)的 Excel 工作表。

例如:假设我想在随 tidyverse R 包安装的 starwars 数据框中连接所有包含“color”的列名。

 library(tidyverse)
colnames(starwars)
[1] "name" "height" "mass" "hair_color" "skin_color" "eye_color" "birth_year" "gender" "homeworld" "species" "films"
[12] "vehicles" "starships"

我可以通过以下方式捕获这些列的索引:

color_vec_num <- which(grepl("COLOR", toupper(colnames(starwars))))
print(color_vec_num)
[1] 4 5 6

列名是什么?

colnames(starwars)[color_vec_num]
[1] "hair_color" "skin_color" "eye_color"

我可以很容易地通过名称将这些列名称链接在一起。查看前 4 行 starwars:

str_c(starwars$hair_color, starwars$skin_color, starwars$eye_color)[1:4]
[1] "blondfairblue" NA NA "nonewhiteyellow"

但是,我尝试使用列索引失败了。

根据 Akrun 发现的拼写错误进行编辑 借用此 SO use of double brackets创建(变异)一个新变量是可行的,但这会单独且明确地标识列,而不是使用数字向量来标识每个列索引。

starwars %>% mutate(newcolor = paste(.[[4]],.[[5]], .[[6]])) %>% select(name, newcolor)
# A tibble: 87 x 2
name newcolor
<chr> <chr>
1 Luke Skywalker blond fair blue
2 C-3PO NA gold yellow
3 R2-D2 NA white, blue red

这种尝试,让人联想到 previous SO answer for a different question ,显然看起来不对。

paste(starwars %>% select(color_vec_num), collapse = " ", stringsAsFactors = FALSE)
[1] "c(\"blond\", NA, NA, \"none\", \"brown\", \"brown, grey\", \"brown\", NA, \"black\", \"auburn, white\", \"blond\", \"auburn, grey\", \"brown\", \"brown\", NA, NA,

最佳答案

我们可以使用列索引 (.[color_vec_num]) 对列进行子集化,并在 mutate 中将其reduce 为单个列/向量通过连接 (str_c)

library(tidyverse)
out <- starwars %>%
mutate(newcolor = reduce(.[color_vec_num], str_c))
out %>%
pull(newcolor) %>%
head(4)
#[1] "blondfairblue" NA NA "nonewhiteyellow"

关于OP的paste中的错误

paste(.[[4]],.[[5]], [[6]]

最后一个缺少 即它应该是

starwars %>%
mutate(newcolor = paste(.[[4]],.[[5]], .[[6]]))

话虽如此,与 pasteunite 相比,使用 str_c 有明显的优势(来自 tidyr) 关于缺失值。使用 str_c,列中的任何缺失值都会为整行返回 NA,而 pasteunite 会将 NA 到字符并返回类似

"NA gold yellow" 

对于 str_c

NA 的第二个元素

关于r - 基于在 R w/dplyr mutate() 中作为向量存储的列索引连接 data.frame 字符列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53834230/

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