在R语言中基于现有数据框创建提取动物名称的新列F
提取每行唯一非空值创建新列F的方法
针对你的数据框,每行仅包含一个非空的动物名称,其余均为空字符串,以下是几种简洁的实现方式:
基础R实现(无需额外包)
用apply逐行遍历,筛选出非空元素:
df$F <- apply(df, 1, function(row) row[row != ""])
dplyr包实现
如果使用tidyverse生态,用行操作快速提取:
library(dplyr) df <- df %>% rowwise() %>% mutate(F = c_across(A:E)[c_across(A:E) != ""]) %>% ungroup()
tidyr+dplyr组合实现(宽转长思路)
适合更复杂的类似场景,先转长格式筛选再合并:
library(tidyr) library(dplyr) df <- df %>% mutate(row_num = row_number()) %>% pivot_longer(A:E, values_to = "F") %>% filter(F != "") %>% select(row_num, F) %>% left_join(df %>% mutate(row_num = row_number()), by = "row_num") %>% select(-row_num) %>% relocate(F, .after = last_col())
结果示例
执行后df的F列会正确提取每行的动物名:
A B C D E F 1 dog <NA> <NA> <NA> dog 2 cat <NA> <NA> <NA> cat 3 zebra <NA> <NA> zebra 4 bird <NA> <NA> bird 5 mouse <NA> mouse
注:若创建df时空字符串未被转为NA,可在创建时添加stringsAsFactors = FALSE参数保持原格式
内容的提问来源于stack exchange,提问作者always.learning
相关产品推荐
相关产品推荐

