为什么这个数据框架不会填充?

时间:2015-02-22 17:47:56

标签: r

我正在使用R编程语言。我试图用For循环填充数据帧。数据框不会填充。有人可以看看我的代码并告诉我出了什么问题吗?我正在使用已编制电影列表及其收益的数据。下面是我正在使用的代码。数据框保持填充" NA"对于所有细胞。

谢谢!

weeks = unique(movieDB$releaseDate)
weeks

finalDB = data.frame(matrix(NA,length(weeks),3))
finalDB

colnames(finalDB) = c("date","releaseLogBoxOfficeDiff","laterLogBoxOfficeDiff")
    finalDB


# Populate the Data Frame # 
for(i in 1:nrow(movieDB)){
row = finalDB$date == movieDB$releaseDate[i]
films = subset(movieDB, releaseDate[i] == movieDB$releaseDate &     releaseRank <=2)
    if(nrow(films) == 2) {
       releaseWeek1 = films$releaseWeekEarnings[films$releaseRank == 1]
       releaseWeek2 = films$releaseWeekEarnings[films$releaseRank == 2]
       laterWeek1   = films$subsequentEarnings[films$releaseRank == 1]
       laterWeek2   = films$subsequentEarnings[films$releaseRank == 2]
       finalDB$releaseLogBoxOfficeDiff[row] = log(releaseWeek1) -     log(releaseWeek2)
     }
   }

示例数据:

Title   releaseWeekEarnings subsequentEarnings  releaseDate releaseRank
1   \xc1 Deriva NA  0   NA  1
2   \xe0 la folie... pas du tout    91630   632364  2/14/03 4
3   \xe0 L'Int\xe9rieur NA  0   NA  2
4   A Mulher Invis\xedvel   NA  0   NA  3
5   A.K.: The Making of Ran NA  0   NA  4
6   Aage Se Right   NA  0   NA  5
7   Aaja Nachle 257500  144599  11/30/07    2
8   Aap Kaa Surroor NA  0   NA  6

1 个答案:

答案 0 :(得分:0)

查看movieDB实际包含的内容。做head(movieDB)str(movieDB)。数据看起来像你期望的那样吗?

以下是您的示例数据的样子:

> head(movieDB)
  Number                     Title releaseWeekEarnings subsequentEarnings releaseDate releaseRank
1      1                  À Deriva                  NA                  0        <NA>           1
2      2 à la folie... pas du tout               91630             632364     2/14/03           4
3      3             à L'Intérieur                  NA                  0        <NA>           2
4      4        A Mulher Invisível                  NA                  0        <NA>           3
5      5   A.K.: The Making of Ran                  NA                  0        <NA>           4
6      6             Aage Se Right                  NA                  0        <NA>           5

> str(movieDB)
'data.frame':   8 obs. of  6 variables:
 $ Number             : int  1 2 3 4 5 6 7 8
 $ Title              : Factor w/ 8 levels "À Deriva","à L'Intérieur",..: 1 3 2 4 5 6 7 8
 $ releaseWeekEarnings: int  NA 91630 NA NA NA NA 257500 NA
 $ subsequentEarnings : int  0 632364 0 0 0 0 144599 0
 $ releaseDate        : Factor w/ 2 levels "11/30/07","2/14/03": NA 2 NA NA NA NA 1 NA
 $ releaseRank        : int  1 4 2 3 4 5 2 6
> 

我没有您的原始数据,也不知道您如何将其读入R,但我必须稍微清理您的样本数据才能读取它:

  1. 您的数据包含六列但只有五列名称。第一列是行号。在标题行(第一行)的Number之前添加IDTitle之类的内容,或删除该列。

  2. 将电影标题括在引号中,以便R不会将标题中的空格视为分隔符。

    查看?read.table并确保您的引号与Title中的字符不同。例如。如果您的标题包含L'Intérieur中的撇号,则不能使用单引号。您可以使用read.table(..., quote="-")将其他字符定义为引号。引号必须是ASCII,因此请在Excel中查看数据以了解可用的字符。

  3. 从标题中删除多字节字符,例如\xe0,或者以系统可以处理的编码方式导出它们。

    从Excel导出时,您应该可以在设置中处理上述所有内容。

  4. 在清理之后,我将数据读入R:

    movieDB <- read.table(textConnection("
    Number Title releaseWeekEarnings subsequentEarnings releaseDate releaseRank
    1 \"À Deriva\" NA 0 NA 1
    2 \"à la folie... pas du tout\" 91630 632364 2/14/03 4
    3 \"à L'Intérieur\" NA 0 NA 2
    4 \"A Mulher Invisível\" NA 0 NA 3
    5 \"A.K.: The Making of Ran\" NA 0 NA 4
    6 \"Aage Se Right\" NA 0 NA 5
    7 \"Aaja Nachle\" 257500 144599 11/30/07 2
    8 \"Aap Kaa Surroor\" NA 0 NA 6
    "), header=TRUE)
    

    现在您的代码正常运行,但由于相关列包含缺失数据 - 仅列出第二部电影的发布日期 - 所有使用这些缺失值的计算必须生成{{1} }以及:

    NA