我有一个数据框,其中包含Y,Q或M周期类型的列 我需要用下面列的句点类型替换所有Y. 我使用了for循环,但运行时间太长了。没有for循环的任何关于如何做到这一点的建议。
这是我现在的代码:
$file = "my_test.txt";
$fp = fopen($file, 'w');
fwrite($fp, $content);
fclose($fp);
chmod($file, 0777);
(我的实际数据框有202696列)
答案 0 :(得分:1)
尝试dplyr
library(dplyr)
data.1 %>%
mutate(PeriodType = if_else(PeriodType == "Y",
lag(PeriodType, n = 1L),
PeriodType))
虽然我认为更安全的方法(假设您之前没有NA's
)将首先用PeriodType == "Y"
替换所有NA
,然后使用tidyr
到fill
数据(通过替换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)