2016-03-01 2 views
-4

У меня есть следующая таблица:Число вхождений по горизонтали

Fashion  Travel  Home  Electronics Toys 
Y    N   N   N   N  
N    N   N   Y   N  
Y    Y   Y   Y   N  
Y    N   N   N   N  
Y    Y   Y   Y   Y  
Y    Y   N   Y   Y  

мне нужно подсчитать количество вхождений «Y» в строке и сохранить его в колонке «Фильтр».

Результат должен быть следующим.

Fashion  Travel  Home  Electronics Toys Filter 
Y    N   N   N   N 1 
N    N   N   Y   N 1 
Y    Y   Y   Y   N 4 
Y    N   N   N   N 1 
Y    Y   Y   Y   Y 5 
Y    Y   N   Y   Y 4 

ответ

2

Мы можем использовать rowSums:

#data 
df <- read.table(text = "Fashion  Travel  Home  Electronics Toys 
Y    N   N   N   N  
N    N   N   Y   N  
Y    Y   Y   Y   N  
Y    N   N   N   N  
Y    Y   Y   Y   Y  
Y    Y   N   Y   Y", header = TRUE) 


#add filter column 
df$Filter <- rowSums(df == "Y") 

#result 
df 
# Fashion Travel Home Electronics Toys Filter 
# 1  Y  N N   N N  1 
# 2  N  N N   Y N  1 
# 3  Y  Y Y   Y N  4 
# 4  Y  N N   N N  1 
# 5  Y  Y Y   Y Y  5 
# 6  Y  Y N   Y Y  4 
0

Вы можете использовать stringr пакет

df$Filter <- apply(df, 1, function(i) sum(str_count(i, "Y"))) 
    df 
#  x y Filter 
# 1 Y N  1 
# 2 N N  0 
# 3 Y N  1 
# 4 Y Y  2 
+0

и вниз голос был брошен, потому что ....? – Sotos

+3

Хорошо, я понимаю. Это имеет смысл, если вопрос был приостановлен, хотя и неполный. Вопрос в ожидании - отговаривает OP от лени. Головокружительные ответы - Поощряет других быть ленивыми – Sotos

+3

@ Сотос Я полностью согласен с вами. Подобные подталкивающие подлинные ответы - это злоупотребление правом голоса. – akrun

0

Вы можете использовать функцию apply найти length из Y с в каждой строке

df$Filter <- apply(df, 1, function(x) length(which(x=='Y'))) 


# Fashion Travel Home Electronics Toys Filter 
#1  Y  N N   N N  1 
#2  N  N N   Y N  1 
#3  Y  Y Y   Y N  4 
#4  Y  N N   N N  1 
#5  Y  Y Y   Y Y  5 
#6  Y  Y N   Y Y  4 
1

Мы можем также использовать

df1$Filter <- Reduce(`+`,lapply(df1, `==`, "Y")) 
df1$Filter 
#[1] 1 1 4 1 5 4 
+0

Почему это нисходящее? – akrun

+1

Вы ободряете ленивость OP. –

+0

@Pascal Итак, вы остановили все ответы, размещенные здесь? – akrun

Смежные вопросы