我有這樣一個數據幀進行計數:發生在一個data.frame
G1 G2 G3 a b f b c a c d b
和參考列表: L: 一個 b Ç d Ë ˚F
我想有以下的輸出:
a: 2, G1,G3 (that is "a" occurs two times in G1 and in G3 column) b: 3, G1,G2,G3 c: 2, G1,G2
等.. 誰能幫助我?抱歉打擾你,但我是新的R 在此先感謝。
愛蓮
我有這樣一個數據幀進行計數:發生在一個data.frame
G1 G2 G3 a b f b c a c d b
和參考列表: L: 一個 b Ç d Ë ˚F
我想有以下的輸出:
a: 2, G1,G3 (that is "a" occurs two times in G1 and in G3 column) b: 3, G1,G2,G3 c: 2, G1,G2
等.. 誰能幫助我?抱歉打擾你,但我是新的R 在此先感謝。
愛蓮
我以另一種方式嘗試這個。
A=data.frame(G1=c("a","b","c"), G2=c("b","c","d"), G3=c("f","a","b"))
B= melt(as.matrix(A))
B$X2 =as.character(B$X2)
B1=table(as.matrix(A))
D=aggregate(X2~value , B, FUN=c)
D$cnt=B1[D$value]
D
輸出是
value X2 cnt
1 a G1, G3 2
2 b G1, G2, G3 3
3 c G1, G2 2
4 d G2 1
5 f G3 1
你可以做這樣的事情:
r <- reshape(d,varying=list(colnames(d)),direction='long',
v.names='value',times=colnames(d),timevar='colname')
res <- by(r,r$value,FUN=function(x){unique(x$colname)})
> res
r$value: a
[1] "G1" "G3"
------------------------------------------------------------
r$value: b
[1] "G1" "G2" "G3"
------------------------------------------------------------
r$value: c
[1] "G1" "G2"
------------------------------------------------------------
r$value: d
[1] "G2"
------------------------------------------------------------
r$value: f
[1] "G3"
基本上res
是,信中會出現包含每個字母列表列名的向量,如:
res$a : 'G1', 'G3'
res$b : 'G1', 'G2', 'G3'
...
如果你只想要發生的次數,你可以這樣做:
> lapply(res,length)
$a
[1] 2
$b
[1] 3
$c
[1] 2
$d
[1] 1
$f
[1] 1
編輯:
要在文件上寫res
,一種方式可能是以下幾點:
# prepare the table (data.frame) to be written
dF <- do.call(rbind.data.frame, lapply(res,function(x){list(Occur=length(x),Columns=paste(x,collapse=' '))}))
dF <- cbind(Letter=row.names(dF),dF)
# write the table to file
write.table(dF,row.names=FALSE,sep=',',file='myfile.csv')
文件文本:
"Letter","Occur","Columns"
"a",2,"G1 G3"
"b",3,"G1 G2 G3"
"c",2,"G1 G2"
"d",1,"G2"
"f",1,"G3"
@Eleonora:剛一說明:如果你的data.frame的第一行是:' 'A' 'B'「a''?在這種情況下,G3會出現2次「a」。在這種情況下,「a」的正確計數是多少? 2或3?如果它是前者保留當前的代碼;如果是後者,只需從'by'函數中刪除'unique' :) – digEmAll
嗨,首先,非常感謝您的幫助!是的,我的data.frame的第一行是「a」,「b」,「f」。 「a」的正確計數是2,因爲它出現在G1和G3樣本中。事實上,你的代碼工作。我只是有最後一個問題。如何將res保存爲xls或txt文件?謝謝! – Elb
@EleonoraLusito:檢查我的編輯;) – digEmAll
這裏這兩種方法都工作得很好了。只是想我會給我一個不同的方法,我用於類似的問題。
#Vinux's data:
A=data.frame(G1=c("a","b","c"), G2=c("b","c","d"), G3=c("f","a","b"))
B <- data.frame(x=rep(colnames(A), sapply(A, length)), #means of reshaping data
y=c(apply(A, 2, as.character)))
C <- split(B$x, B$y) #column names by value
D <- data.frame(letter=names(C), occurance=sapply(C, length)) #get occurrences
D$column <- sapply(C, as.character) #force vector of vectors
D[, c(1, 3, 2), ] #order it
其中產量:
letter column occurance
a a G1, G3 2
b b G1, G2, G3 3
c c G1, G2 2
d d G2 1
f f G3 1
感謝vinux!有用!! – Elb