Как я могу пройти через вектор в R Dataframe - PullRequest
3 голосов
/ 22 мая 2019

У меня есть датафрейм, похожий на этот

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 ]

4 голосов
/ 22 мая 2019

Можно указать gather данные в «длинном» формате, filter строки с «Y», сгруппированные по «Name», вставить элементы в «key» (str_c) и * 1004.* с исходным набором данных

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

данные

df1 <- structure(list(Name = c("A", "B", "C"), Cricket = c("Y", "N", 
"Y"), Football = c("Y", "Y", "N"), Swimming = c("N", "N", "Y"
)), class = "data.frame", row.names = c(NA, -3L))
1 голос
/ 22 мая 2019

Примерно так (в базе 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...