如何在R Dataframe中通过向量

时间:2019-05-22 15:11:21

标签: r dataframe

我有一个看起来像这样的数据框

Name   Cricket   Football   Swimming 
A      Y         Y          N
B      N         Y          N
C      Y         N          Y

我想要一个遍历所有列并使用如下列名标记每个条目的代码:

Name   Cricket   Football   Swimming   Sports
A      Y         Y          N          Cricket and Football
B      N         Y          N          Football Only
C      Y         N          Y          Cricket and Swimming

我有一个使用ifelse()的想法,但是如果数据帧的列数增加并且我需要动态的东西,而我并不需要每次都更改它,那将很繁琐。

请帮助!!

2 个答案:

答案 0 :(得分:4)

一种选择是将数据gather转换为“长”格式,filter按“名称”分组的带有“ Y”的行,将元素粘贴到“键”中({{1 }})和str_c与原始数据集

left_join

数据

library(tidyverse)
df1 %>%
   gather(key, val, -Name) %>% 
   filter(val == 'Y') %>% 
   group_by(Name) %>% 
   summarise(Sports = str_c(key, collapse= ' and ')) %>%
   left_join(df1) %>%
   select(names(df1), "Sports")
# A tibble: 3 x 5
#  Name  Cricket Football Swimming Sports              
#  <chr> <chr>   <chr>    <chr>    <chr>               
#1 A     Y       Y        N        Cricket and Football
#2 B     N       Y        N        Football            
#3 C     Y       N        Y        Cricket and Swimming

答案 1 :(得分:1)

(在R中)这样的事情也可以做到:

df$Sports <- apply(df[,-1]=="Y", 1, function(r) paste(names(df)[-1][r], collapse=" and "))

#  Name Cricket Football Swimming               Sports
#1    A       Y        Y        N Cricket and Football
#2    B       N        Y        N             Football
#3    C       Y        N        Y Cricket and Swimming