在Excel中,很容易抓取列中的单元格并向下拖动光标以替换下面的多个单元格,以便每个单元格与原始单元格成为相同的值.
可以使用for循环在R中执行此功能.我今天花了一些时间试图解决这个问题,并且认为我会为了下一个人的利益而分享:
for (row in 2:length(data$column)){ # 2 so you don't affect column names
if(data$column[row] == "") { # if its empty...
data$column[row] = data$column[row-1] # ...replace with previous row's value
}
}
Run Code Online (Sandbox Code Playgroud)
这对我有用,虽然花了很长时间(5-10分钟)才能运行庞大的数据文件.也许有一种更有效的方法来实现这一功能,我鼓励任何人说如何做到这一点.
谢谢,祝你好运.
我确定之前提出过这个问题,但我想就我的具体问题提出一些意见.作为对你的帮助的回报,我将使用一个有趣的例子.
Sean Lahman提供MLB棒球统计数据的巨型数据集,可在他的网站上免费获取(http://www.seanlahman.com/baseball-archive/statistics/).
我想用这些数据来回答以下问题:美国职业棒球大联盟每十年记录的每场比赛的本垒打平均数是多少?
下面我贴了所有相关的脚本:
teamdata = read.csv("Teams.csv", header = TRUE)
decades = c(1870,1880,1890,1900,1910,1920,1930,1940,1950,1960,1970,1980,1990,2000,2010,2020)
i = 0
meanhomers = c()
for(i in c(1:length(decades))){
meanhomers[i] = mean(teamdata$HR[teamdata$yearID>=decades[i] & teamdata$yearID<decades[i+1]]);
i = i+1
}
Run Code Online (Sandbox Code Playgroud)
我的主要问题是,如何在不诉诸可怕的for-loop的情况下确定这个答案?
附带问题:什么简单的脚本会为我生成数十年的向量?
(对于那些对棒球问题的答案感兴趣的人,请参阅下文.)
meanhomers
[1] 4.641026 23.735849 34.456522 20.421053 25.755682 61.837500 84.012500
[8] 80.987500 130.375000 132.166667 120.093496 126.700000 148.737410 173.826667
[15] 152.973333 NaN
Run Code Online (Sandbox Code Playgroud)
为清晰起见编辑:结果我回答了错误的问题; 上面提供的答案表示每队每年的本垒打次数,而不是每场比赛.对分母的一点修正就能得到正确的结果.