क्या इन 2 चरणों को एक में मिलाने का कोई सुविधाजनक तरीका है?

df = data.frame(aa = 'A', ab = '', n = 'C')
#  aa  ab  n
#   A      C

temp = df[ grep('a', names(df)) ]          
#  aa  ab  
#   A       

ans = temp[ temp != '' ]
# [1] "A"

किसी सुझाव के लिए अग्रिम धन्यवाद।

r
0
mfh92 11 जुलाई 2019, 02:07

2 जवाब

सबसे बढ़िया उत्तर

यह मानने का एक तरीका है कि आपके डेटाफ़्रेम में केवल एक पंक्ति है -

df[grepl("a", names(df)) & df != '']

[1] "A"

@thelatemail के लिए धन्यवाद, यहां पंक्तियों की किसी भी संख्या के लिए एक सामान्यीकृत समाधान है -

df <- data.frame(aa = c('A','B'), ab = c('','T'), n = c('C', 'C'))

df[grepl("a", names(df)[col(df)]) & df != '']

[1] "A" "B" "T"
2
Shree 11 जुलाई 2019, 06:10

साफ-सुथरा रास्ता

library(tidyr)
library(dplyr)
df = data.frame(aa = 'A', ab = '', n = 'C')
df.long <-gather(df, col) #chaging to long format and key is col
df.long %>%
filter(col %in% grep("a",col, value = T) & value != '')
1
infominer 11 जुलाई 2019, 02:22