2016-10-22 5 views
-1

テーブルの欠落している行に適切なヘッダーと0を入力しようとしています。私はまた、テーブルで分裂をしようとしています。欠落している列に0を入力してから、テーブルの一番下の行を別のテーブルの一番下の行で割ります。

nba <- read.csv('nbadatasort.csv',header=FALSE) 

one <- grepl('\\Q+\\E',nba$V2) 
two <- grepl('\\Q*\\E',nba$V2) 
three <- grepl('\\Q^\\E',nba$V2) 
needed <- one | two | three 


allstar <- subset.data.frame(nba, needed) 

#This table lets me know how many people are in each draft number: It will return the following: 
# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
#25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 24 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 
#54 55 56 57 58 59 60 
#25 20 20 20 19 11 10 
table(nba$V1) 


#This table lets me know how many all stars each draft number had. It will return the following: 
#1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 17 18 19 20 21 24 25 28 29 30 31 32 35 37 38 43 45 47 48 51 57 60 
#17 9 11 8 9 6 3 1 8 8 4 2 1 2 2 4 2 3 2 3 4 1 1 1 2 1 2 2 1 1 1 1 2 2 1 1 1 
table(allstar$V1) 

私の目標は、その後、私はそれぞれの下を分割する2番目のテーブル(ALLSTARます$ V1)に乗り、11その間の12と13と12の下にゼロが存在するように、それを埋めるためにありますnbaテーブルによってallstarテーブルの値を取得します。したがって、1の場合は.68、2の場合は.36などとなります。

ご協力いただきありがとうございます。ありがとう。

+0

代わりに使用するのでは '「\\ Q \\ E」'特殊な正規表現文字をエスケープするために、あなたはまた、 '固定= true'をを使用することができます'pattern ='引数のすべてを固定文字列として扱う 'grepl'の引数です。 – useR

答えて

0

あなたの質問を誤解していない場合は、各ドラフト番号のallstarsの割合を調べようとしています。ここでは基本Rを利用する方法です:あなたが見ることができるように、NBAのデータフレームで60個のユニークなドラフト番号が、(あなたが持っているものに似ている)ALLSTARのデータフレーム内の唯一の47のユニークなドラフト番号が

# Create test datasets 
set.seed(123) 
nba = sample(1:60, 500, replace = TRUE) 
allstar = sample(1:60, 100, replace = TRUE) 

# Count the occurences of each draft number and convert to dataframe 
nbadf = as.data.frame(table(nba)) 
allstardf = as.data.frame(table(allstar)) 

# Check the two dataframes 
unique(nbadf$nba) 
unique(allstardf$allstar) 

> unique(nbadf$nba) 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 
[28] 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 
[55] 55 56 57 58 59 60 
60 Levels: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ... 60 
> unique(allstardf$allstar) 
[1] 1 2 3 4 5 6 8 10 11 13 17 18 19 20 21 22 23 24 25 26 27 28 30 31 32 33 34 
[28] 35 36 40 41 42 43 45 46 47 49 50 52 53 54 55 56 57 58 59 60 
47 Levels: 1 2 3 4 5 6 8 10 11 13 17 18 19 20 21 22 23 24 25 26 27 28 30 31 ... 60 

があります。 Now merge nbadfの "nba"とallstardfの "allstar"をキーとする2つのデータフレーム。 all = TRUEは、我々は我々が望むものである、外部結合を望む意味:

# Use merge to "Outer Join" the two dataframes 
fullDF = merge(nbadf, allstardf, by.x = "nba", by.y = "allstar", all = TRUE) 

# Replace the NA produced by the missing rows in allstardf with zeros 
fullDF[is.na(fullDF)] = 0 

# Calculate percentage of allstars for each draft number 
fullDF$Percent = with(fullDF, Freq.y/Freq.x) 

# Optionally rename the columns 
names(fullDF) = c("Draft_Num", "All", "AllStar", "AllStarPercent") 

> head(fullDF) 
    Draft_Num All AllStar AllStarPercent 
1   1 6  1  0.1666667 
2   2 4  3  0.7500000 
3   3 7  3  0.4285714 
4   4 8  2  0.2500000 
5   5 6  3  0.5000000 
6   6 8  2  0.2500000 
関連する問題