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 № 1moż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.