使用R将单元格替换为其下方单元格的值

时间:2018-06-14 18:05:59

标签: r

我有一个数据框,其中包含Y,Q或M周期类型的列 我需要用下面列的句点类型替换所有Y. 我使用了for循环,但运行时间太长了。没有for循环的任何关于如何做到这一点的建议。

这是我现在的代码:

$file = "my_test.txt";
$fp = fopen($file, 'w');
fwrite($fp, $content);
fclose($fp);
chmod($file, 0777); 

(我的实际数据框有202696列)

2 个答案:

答案 0 :(得分:1)

尝试dplyr

library(dplyr)

data.1 %>% 
  mutate(PeriodType = if_else(PeriodType == "Y", 
                              lag(PeriodType, n = 1L),
                              PeriodType))

虽然我认为更安全的方法(假设您之前没有NA's)将首先用PeriodType == "Y"替换所有NA,然后使用tidyrfill数据(通过替换NAs。

library(dplyr)
library(tidyr)

data.1 %>% 
  mutate(PeriodType = if_else(PeriodType == "Y",
                              NA_character_,
                              PeriodType)) %>% 
  fill(PeriodType, direction = "up")

答案 1 :(得分:0)

尝试这样的事情。如果你把这些值滞后,你就可以做一个简单的ifelse语句。

shift <- function(x, lag) {
      n <- length(x)
      xnew <- rep(NA, n)
      if (lag < 0) {
        xnew[1:(n-abs(lag))] <- x[(abs(lag)+1):n]
      } else if (lag > 0) {
        xnew[(lag+1):n] <- x[1:(n-lag)]
      } else {
        xnew <- x
      }
      return(xnew)
    }

    data.1$PeriodType_Shift <- shift(data.1$PeriodType, -1)
    ifelse(data.1PeriodType == "Y", data.1PeriodType_Shift, data.1$PeriodType)