小编ady*_*552的帖子

R:用最后一个非空单元格的值填充空单元格

在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分钟)才能运行庞大的数据文件.也许有一种更有效的方法来实现这一功能,我鼓励任何人说如何做到这一点.

谢谢,祝你好运.

r cell fill

8
推荐指数
2
解决办法
3995
查看次数

避免R中的For-Loops

我确定之前提出过这个问题,但我想就我的具体问题提出一些意见.作为对你的帮助的回报,我将使用一个有趣的例子.

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)

为清晰起见编辑:结果我回答了错误的问题; 上面提供的答案表示每队每年的本垒打次数,而不是每场比赛.对分母的一点修正就能得到正确的结果.

for-loop r

3
推荐指数
1
解决办法
177
查看次数

标签 统计

r ×2

cell ×1

fill ×1

for-loop ×1