/ / R Jak zliczać wystąpienia wartości w wielu kolumnach ramki danych i zapisywać wartości kolumnowe od określonej wartości jako nowego wiersza? - r, count, find-occurrences

R Jak zliczać wystąpienia wartości w wielu kolumnach ramki danych i zapisywać wartości kolumnowe od określonej wartości jako nowego wiersza? - r, count, find-occurrences

Mam dużą ramkę danych (około 1000 wierszy i 30 000 kolumn), która wygląda następująco:

   chr pos  sample1 sample2 sample3 sample 4
1 5050    1       NA      0       0.5
1 6300    1       0       0.5     1
1 7825    1       0       0.5     1
1 8200    0.5     0.5     0       1

gdzie przy danym "chr" i "pos" wartość dla adana próbka może przybrać postać 0, 0,5, 1 lub NA. Mam do wykonania dużą liczbę zapytań, które będą wymagać podzbioru i porządku ramki danych na podstawie podsumowań wartości dla każdej próbki.

Chciałbym policzyć liczbęwystąpienia danej wartości (np. 0,5) dla każdej kolumny i zapisz ją jako nowy wiersz w mojej ramce danych. Moim ostatecznym celem jest możliwość wykorzystania wartości nowego wiersza do podzbioru i / lub uporządkowania kolumn w mojej ramce danych. "Widziałem podobne pytania dotyczące liczenia wystąpień, ale nie mogę znaleźć / rozpoznać rozwiązania, aby to zrobić we wszystkich kolumnach jednocześnie i zapisywanie kolumna liczy się dla określonej wartości jako nowy wiersz.

Odpowiedzi:

5 dla odpowiedzi № 1

możesz zastosować funkcję do całej kolumny z twoimi danymi. Przypuśćmy, że chcesz policzyć liczbę "A" w każdej kolumnie w data.frame d

#a sample data.frame
L3 <- LETTERS[1:3]
(d <- data.frame(cbind(x = 1, y = 1:10), fac = sample(L3, 10, replace = TRUE)))



# the function you are looking for
apply(X=d,2,FUN=function(x) length(which(x=="A")))

0 dla odpowiedzi nr 2

Bardzo podobny do @Jilber. Zakłada, że ​​twoje dane znajdują się w ramce danych df.

lst      <- colnames(df[,-(1:2)])
count.na <- sapply(lst,FUN=function(x,df){sum(is.na(df[,x]))},df)
count.00 <- sapply(lst,FUN=function(x,df){sum(df[,x]==0,na.rm=T)},df)
count.05 <- sapply(lst,FUN=function(x,df){sum(df[,x]==0.5,na.rm=T)},df)
count.10 <- sapply(lst,FUN=function(x,df){sum(df[,x]==1.0,na.rm=T)},df)

df <- rbind(df,
c(NA,NA,count.na),
c(NA,NA,count.00),
c(NA,NA,count.05),
c(NA,NA,count.10))

Prawdopodobnie chciałbyś zastąpić NA w ostatnim oświadczeniu rbind (...) czymś, co identyfikuje to, co liczysz.