我正在使用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
答案 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,但我必须稍微清理您的样本数据才能读取它:
您的数据包含六列但只有五列名称。第一列是行号。在标题行(第一行)的Number
之前添加ID
或Title
之类的内容,或删除该列。
将电影标题括在引号中,以便R不会将标题中的空格视为分隔符。
查看?read.table
并确保您的引号与Title
中的字符不同。例如。如果您的标题包含L'Intérieur
中的撇号,则不能使用单引号。您可以使用read.table(..., quote="-")
将其他字符定义为引号。引号必须是ASCII,因此请在Excel中查看数据以了解可用的字符。
从标题中删除多字节字符,例如\xe0
,或者以系统可以处理的编码方式导出它们。
从Excel导出时,您应该可以在设置中处理上述所有内容。
在清理之后,我将数据读入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