基于列索引连接data.frame字符列,列索引存储为R w/dplyr mutate()中的向量?
可以使用stringr函数(例如str_c())或paste,基于存储为向量的列索引连接数据帧列吗?然后,如何使用dplyr mutate()创建新变量 对于电子邮件聚合任务,我希望这样做,这意味着使用readxl包阅读包含不同名称列(例如,只有一个名称列,有时还有名字和姓氏)的Excel工作表 例如: 假设我想连接tidyverse R软件包安装的starwars数据框中包含“color”的所有列名基于列索引连接data.frame字符列,列索引存储为R w/dplyr mutate()中的向量?,r,dplyr,R,Dplyr,可以使用stringr函数(例如str_c())或paste,基于存储为向量的列索引连接数据帧列吗?然后,如何使用dplyr mutate()创建新变量 对于电子邮件聚合任务,我希望这样做,这意味着使用readxl包阅读包含不同名称列(例如,只有一个名称列,有时还有名字和姓氏)的Excel工作表 例如: 假设我想连接tidyverse R软件包安装的starwars数据框中包含“color”的所有列名 library(tidyverse) colnames(starwars) [1] "n
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
我可以很容易地按名称将这些列名链接在一起。看看《星球大战》的前4排:
str_c(starwars$hair_color, starwars$skin_color, starwars$eye_color)[1:4]
[1] "blondfairblue" NA NA "nonewhiteyellow"
但是,我尝试使用列索引失败
Edit per Akrun发现了一个错误,借用它来创建(变异)一个新变量,但这可以单独明确地标识列,而不是使用数字向量来标识每个列索引
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
我们可以使用列索引(
[color\u vec\u num]
)将列子集,并通过连接(str\u c
)将其减少为mutate
中的单个列/向量
最后一个缺少
,即它应该是
starwars %>%
mutate(newcolor = paste(.[[4]],.[[5]], .[[6]]))
话虽如此,与粘贴
或联合
(来自tidyr
)相比,使用stru_c
对于缺失值有明显的优势。使用stru_c
,列中任何缺失的值都会返回整行的NA
,而paste
或unite
会将NA
转换为字符并返回类似的值
"NA gold yellow"
对于第二个元素,当它是NA
时,对于stru c
library(tidyverse)
out <- starwars %>%
mutate(newcolor = reduce(.[color_vec_num], str_c))
out %>%
pull(newcolor) %>%
head(4)
#[1] "blondfairblue" NA NA "nonewhiteyellow"
paste(.[[4]],.[[5]], [[6]]
starwars %>%
mutate(newcolor = paste(.[[4]],.[[5]], .[[6]]))
"NA gold yellow"