首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >标识具有最低值的列

标识具有最低值的列
EN

Stack Overflow用户
提问于 2018-06-07 05:10:34
回答 2查看 37关注 0票数 1

我有一个数据框架,如下所示

DF <- structure(list(ID = c(1, 129, 169, 1087), `Collab Years Patents` = c(NA, 
"2011, 2011, 2011", "2010", "2006, 2006"), `Collab Years Publications` = c("2011", 
"2015, 2016, 2016", "2010", NA), ECP = c("2011", "2011", "2010", 
"2006")), .Names = c("ID", "Collab Years Patents", "Collab Years Publications", 
"ECP"), row.names = c(1L, 107L, 136L, 859L), class = "data.frame")

列ECP是两个协作列的最小年份(可以包含几年)。我需要一个输出,告诉我ECP属于哪一列。例如,上面的解决方案可以是上面带有元素的框架的另一个列向量:

    structure(list(ID = c(1, 129, 169, 1087), `Collab Years Patents` = c(NA, 
"2011, 2011, 2011", "2010", "2006, 2006"), `Collab Years Publications` = c("2011", 
"2015, 2016, 2016", "2010", NA), ECP = c("2011", "2011", "2010", 
"2006"), identifier = c("Publications", "Patents", "Both", "Patents"
)), .Names = c("ID", "Collab Years Patents", "Collab Years Publications", 
"ECP", "identifier"), row.names = c(1L, 107L, 136L, 859L), class = "data.frame")
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-07 05:21:07

这里有一个使用str_detect的选项。循环遍历协作列(sapply(DF[2:3],),使用str_detect检查哪一列的值为'ECP‘。乘以col将TRUE值转换为列索引,将NA元素替换为0,根据最大列索引获取对应的列名,使用sub删除列名的前缀部分,并将'm1‘中大于0的元素分配给创建的向量'v1’上的' both‘。

library(stringr)
m1 <- col(DF[2:3]) *sapply(DF[2:3], function(x) str_detect(x, DF$ECP))
m1[is.na(m1)] <- 0
v1 <- sub(".*\\s(\\w+)$", "\\1", names(DF)[2:3][max.col(m1)])
v1[rowSums(m1 > 0) ==2] <- "Both"
DF$identifier <- v1
DF$identifier
#[1] "Publications" "Patents"      "Both"         "Patents"   
票数 3
EN

Stack Overflow用户

发布于 2018-06-07 08:07:39

使用tidyverse (dplyrpurrr):

library(tidyverse)

DF %>%
  mutate_at(2:3,strsplit,", ") %>%
  transmute(identifier = pmap(.[2:4],~c("Publications","Patents","Both")[
    2*(..3 %in% .x) + (..3 %in% .y)])) %>%
  bind_cols(DF,.)

#     ID Collab Years Patents Collab Years Publications  ECP   identifier
# 1    1                 <NA>                      2011 2011 Publications
# 2  129     2011, 2011, 2011          2015, 2016, 2016 2011      Patents
# 3  169                 2010                      2010 2010         Both
# 4 1087           2006, 2006                      <NA> 2006      Patents
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50729668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档