我有這樣的情況:
DF頻率計數
List Count
R472 1
R472 1
R472 2
R472 2
R845 1
R845 2
R845 2
.... ...
我想下面的輸出:
DF
List freq_of_number1 freq_of_number2
R472 2 2
R845 1 2
....
任何想法? Thnks。
我有這樣的情況:
DF頻率計數
List Count
R472 1
R472 1
R472 2
R472 2
R845 1
R845 2
R845 2
.... ...
我想下面的輸出:
DF
List freq_of_number1 freq_of_number2
R472 2 2
R845 1 2
....
任何想法? Thnks。
這是aggregate
工作:
d <- read.table(text="List Count
R472 1
R472 1
R472 2
R472 2
R845 1
R845 2
R845 2", header=TRUE)
aggregate(Count ~ List, data=d, FUN=table)
# List Count.1 Count.2
# 1 R472 2 2
# 2 R845 1 2
編輯:
上面的代碼在你提供的情況下,因爲你已經接受了答案,我認爲它的工作原理爲您較大的情況下同樣,但如果List
中的任何條目缺少Count
中的某個數字,則此簡單答案將會失敗。對於更一般的情況:
DF <- read.table(text="List Count
R472 1
R472 1
R472 2
R472 2
R845 1
R845 2
R845 2
R999 2", header=TRUE)
f <- function(x) {
absent <- setdiff(unique(DF$Count), x)
ab.count <- NULL
if (length(absent) > 0) {
ab.count <- rep(0, length(absent))
names(ab.count) <- absent
}
result <- c(table(x), ab.count)
result[order(names(result))]
}
aggregate(Count ~ List, data=d, FUN=f)
# List Count.1 Count.2
# 1 R472 2 2
# 2 R845 1 2
# 3 R999 0 1
編輯2:
剛看到@ JasonMorgan的答案。去接受那個。
我認爲有一種更有效的方式來做到這一點,但這裏有一個想法
DF <- read.table(text='List Count
R472 1
R472 1
R472 2
R472 2
R845 1
R845 2
R845 2', header=TRUE)
Freq <- lapply(split(DF, DF$Count), function(x) aggregate(.~ List, data=x, table))
counts <- do.call(cbind, Freq)[, -3]
colnames(counts) <- c('List', 'freq_of_number1', 'freq_of_number2')
counts
List freq_of_number1 freq_of_number2
1 R472 2 2
2 R845 1 2
的table
功能不起作用?
> with(DF, table(List, Count))
Count
List 1 2
R472 2 2
R845 1 2
更新:每布蘭登的評論,這也能發揮作用,如果你不喜歡使用with
:
> table(DF$List, DF$Count)
+1這是正確的方法 –
'table()'是你所需要的。 '與'是不必要的。 –
很好的解決方案:d +1 –
mplourde嗨!再次感謝! – Bnf8