2015-10-13 110 views
1

我的問題與this類似,但我沒有一個常數標準。根據其他變量計數數據幀中的變量

我的數據幀是這樣的:

> head(df) 
    id run corr rank 
1 a v1 0.2 1 
2 a v2 0.3 2 
3 a v3 0.6 3 
4 b v2 0.1 1 
5 b v1 0.3 2 
6 b v3 0.4 3 

> dput(df) 
structure(list(id = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 
3L, 4L, 4L, 4L), .Label = c("a", "b", "c", "d"), class = "factor"), 
    run = structure(c(1L, 2L, 3L, 2L, 1L, 3L, 2L, 1L, 3L, 1L, 
    2L, 3L), .Label = c(" v1", " v2", " v3"), class = "factor"), 
    corr = c(0.2, 0.3, 0.6, 0.1, 0.3, 0.4, 0.1, 0.2, 0.3, 0.3, 
    0.4, 0.7), rank = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 
    2L, 3L)), .Names = c("id", "run", "corr", "rank"), class = "data.frame", 
row.names = c(NA, -12L)) 

現在,我要算多久V1(分別爲v2和v3)等於1的排名(分別爲2和3)。輸出應該是這樣的:

1 2 3 
v1 2 2 0 
v2 2 2 0 
v3 0 0 4 
+0

我不知道這個問題以前有多少次被問過?你有沒有做搜索? –

+0

@BonddedDust,有時你只是不知道什麼是正確的關鍵字尋找...... – Iris

回答

2

您可以使用table

table(df$run, df$rank) 

     1 2 3 
    v1 2 2 0 
    v2 2 2 0 
    v3 0 0 4 
1

使用table

> table(df[, c("run", "rank")]) 
    rank 
run 1 2 3 
    v1 2 2 0 
    v2 2 2 0 
    v3 0 0 4 
3

dplyrtidyr方法:

library(dplyr) 
library(tidyr) 

df %>% 
    count(run, rank) %>% 
    spread(rank, n, fill = 0) 

# Source: local data frame [3 x 4] 
# 
#  run  1  2  3 
# (fctr) (int) (int) (int) 
# 1  v1  2  2  0 
# 2  v2  2  2  0 
# 3  v3  0  0  4