如何根据其他列的字符值创建第三列,不包括 NA 和值?
How do I create a third column based on Character Values of other columns, excluding NA and values?
如何根据其他列属性的值创建名为 'title' 的新列?
我在下面展示了示例,其中 'title' 需要根据列 Post、Tel、Surname 和 Emp 创建。 'title' 只是表示哪些值不是 NA。
我有这个
ID1 ID2 Post Tel Surname Emp
<chr> <chr> <chr> <chr> <chr> <chr>
1 S04 S03 NA 369 990247 NA NA
2 S14 S08 NA 069 990351 NA NA
3 S18 S03 N165HT NA Jones NA
4 S19 S13 NA 3069 90685 NA NA
5 S20 S16 NA 3069 90954 NA NA
6 S20 S17 CO19RF NA NA Ocean
我想创建这个:
ID1 ID2 Post Tel Surname Emp title
<chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 S04 S03 NA 369 990247 NA NA Tel
2 S14 S08 NA 069 990351 NA NA Tel
3 S18 S03 N165HT NA Jones NA Post,Surname
4 S19 S13 NA 3069 90685 NA NA Tel
5 S20 S16 NA 3069 90954 NA NA Tel
6 S20 S17 CO19RF NA NA Ocean Post,Emp
此处的一个选项是在创建唯一行标识符 ('rn') 后将 gather
转换为 'long' 格式(同时使用 na.rm = TRUE
删除 NA 元素),按 'rn'、paste
summarise
中的 'key' 元素分组并与原始数据集绑定
library(tidyverse)
df1 %>%
rownames_to_column('rn') %>%
gather(key, val, Post:Emp, na.rm = TRUE) %>%
group_by(rn) %>%
summarise(title = toString(key)) %>%
ungroup %>%
select(-rn) %>%
bind_cols(df1, .)
# ID1 ID2 Post Tel Surname Emp title
#1 S04 S03 <NA> 369 990247 <NA> <NA> Tel
#2 S14 S08 <NA> 069 990351 <NA> <NA> Tel
#3 S18 S03 N165HT <NA> Jones <NA> Post, Surname
#4 S19 S13 <NA> 3069 90685 <NA> <NA> Tel
#5 S20 S16 <NA> 3069 90954 <NA> <NA> Tel
#6 S20 S17 CO19RF <NA> <NA> Ocean Post, Emp
数据
df1 <- structure(list(ID1 = c("S04", "S14", "S18", "S19", "S20", "S20"
), ID2 = c("S03", "S08", "S03", "S13", "S16", "S17"), Post = c(NA,
NA, "N165HT", NA, NA, "CO19RF"), Tel = c("369 990247", "069 990351",
NA, "3069 90685", "3069 90954", NA), Surname = c(NA, NA, "Jones",
NA, NA, NA), Emp = c(NA, NA, NA, NA, NA, "Ocean")), row.names = c("1",
"2", "3", "4", "5", "6"), class = "data.frame")
在基础 R 中:
cols <- c("Post", "Tel", "Surname", "Emp")
d$title <- apply(d[, cols], 1, function(x){
paste(cols[which(!is.na(x))], collapse = ",")
})
如何根据其他列属性的值创建名为 'title' 的新列?
我在下面展示了示例,其中 'title' 需要根据列 Post、Tel、Surname 和 Emp 创建。 'title' 只是表示哪些值不是 NA。 我有这个
ID1 ID2 Post Tel Surname Emp
<chr> <chr> <chr> <chr> <chr> <chr>
1 S04 S03 NA 369 990247 NA NA
2 S14 S08 NA 069 990351 NA NA
3 S18 S03 N165HT NA Jones NA
4 S19 S13 NA 3069 90685 NA NA
5 S20 S16 NA 3069 90954 NA NA
6 S20 S17 CO19RF NA NA Ocean
我想创建这个:
ID1 ID2 Post Tel Surname Emp title
<chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 S04 S03 NA 369 990247 NA NA Tel
2 S14 S08 NA 069 990351 NA NA Tel
3 S18 S03 N165HT NA Jones NA Post,Surname
4 S19 S13 NA 3069 90685 NA NA Tel
5 S20 S16 NA 3069 90954 NA NA Tel
6 S20 S17 CO19RF NA NA Ocean Post,Emp
此处的一个选项是在创建唯一行标识符 ('rn') 后将 gather
转换为 'long' 格式(同时使用 na.rm = TRUE
删除 NA 元素),按 'rn'、paste
summarise
中的 'key' 元素分组并与原始数据集绑定
library(tidyverse)
df1 %>%
rownames_to_column('rn') %>%
gather(key, val, Post:Emp, na.rm = TRUE) %>%
group_by(rn) %>%
summarise(title = toString(key)) %>%
ungroup %>%
select(-rn) %>%
bind_cols(df1, .)
# ID1 ID2 Post Tel Surname Emp title
#1 S04 S03 <NA> 369 990247 <NA> <NA> Tel
#2 S14 S08 <NA> 069 990351 <NA> <NA> Tel
#3 S18 S03 N165HT <NA> Jones <NA> Post, Surname
#4 S19 S13 <NA> 3069 90685 <NA> <NA> Tel
#5 S20 S16 <NA> 3069 90954 <NA> <NA> Tel
#6 S20 S17 CO19RF <NA> <NA> Ocean Post, Emp
数据
df1 <- structure(list(ID1 = c("S04", "S14", "S18", "S19", "S20", "S20"
), ID2 = c("S03", "S08", "S03", "S13", "S16", "S17"), Post = c(NA,
NA, "N165HT", NA, NA, "CO19RF"), Tel = c("369 990247", "069 990351",
NA, "3069 90685", "3069 90954", NA), Surname = c(NA, NA, "Jones",
NA, NA, NA), Emp = c(NA, NA, NA, NA, NA, "Ocean")), row.names = c("1",
"2", "3", "4", "5", "6"), class = "data.frame")
在基础 R 中:
cols <- c("Post", "Tel", "Surname", "Emp")
d$title <- apply(d[, cols], 1, function(x){
paste(cols[which(!is.na(x))], collapse = ",")
})