【发布时间】:2020-05-12 11:00:27
【问题描述】:
我正在尝试编写一个循环来创建一个变量,以便稍后使用 group_by on 进行进一步计算,这表明特定类型(组变量)是否发生在两个日期(日期变量)之间。我要创建的因子称为leaderFactor。
代码抛出错误:“if (test1$party[i] == "PSOE" & test1$elecTypeDate[i] > as_date("1977-01-01") & 中的错误: 需要 TRUE/FALSE 的缺失值”,但两个相关变量中没有缺失值。请帮忙!谢谢!
(旁注:这是一个具有两种以上事件类型的更复杂场景的示例,因此我将在下面的代码中的 if 和 else 之间使用几个 else if 语句。)
数据:
test1<- structure(list(party = c("PP", "PP", "PP", "PP", "PP", "PP",
"PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP",
"PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP",
"PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP",
"PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP",
"PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP",
"PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP",
"PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP",
"PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP",
"PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP",
"PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP",
"PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP",
"PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP",
"PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP",
"PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP",
"PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP",
"PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP",
"PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP", "PP",
"PP", "PP", "PP", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE", "PSOE",
"PSOE", "PSOE", "PSOE", "PSOE"), elecTypeDate = structure(c(3346,
3346, 3346, 3712, 4291, 4503, 4656, 4656, 4656, 4656, 4656, 4656,
4656, 4656, 4656, 4656, 4656, 4656, 4656, 4868, 4868, 4868, 4868,
4868, 4868, 4868, 4868, 4868, 4868, 4991, 4991, 4991, 5144, 5204,
5783, 5995, 6148, 6209, 6360, 6360, 6360, 6360, 6360, 6360, 6360,
6360, 6360, 6360, 6360, 6360, 6360, 6695, 6940, 7274, 7456, 7578,
7790, 7790, 7790, 7790, 7790, 7790, 7790, 7790, 7790, 7790, 7790,
7790, 7821, 8095, 8674, 8766, 8917, 9039, 9251, 9251, 9251, 9251,
9251, 9251, 9251, 9251, 9251, 9282, 9282, 9282, 9435, 9556, 10135,
10500, 10592, 10743, 10743, 10743, 10743, 10743, 10743, 10743,
10743, 10743, 10743, 10743, 10835, 10865, 11017, 11443, 11596,
12173, 12173, 12173, 12173, 12173, 12173, 12173, 12173, 12173,
12204, 12204, 12296, 12326, 12357, 12418, 12478, 12874, 12935,
13453, 13634, 13634, 13634, 13634, 13634, 13634, 13634, 13634,
13634, 13634, 13665, 13695, 13939, 14245, 14245, 14304, 14304,
14914, 15095, 15095, 15095, 15095, 15095, 15095, 15095, 15095,
15095, 15095, 15095, 15095, 15126, 15400, 15400, 15614, 15614,
15645, 16102, 16495, 16556, 16556, 16556, 16556, 16556, 16556,
16556, 16556, 16556, 16556, 16556, 16556, 16587, 16679, 17045,
17045, 17501, 17622, 17928, 17987, 18017, 18017, 18017, 18017,
18017, 18017, 18017, 18017, 18017, 18017, 18017, 18017, 3346,
3346, 3346, 3346, 3377, 3712, 3712, 4291, 4503, 4656, 4656, 4656,
4656, 4656, 4656, 4656, 4656, 4656, 4656, 4656, 4656, 4656, 4868,
4868, 4868, 4868, 4868, 4868, 4868, 4868, 4868, 4868, 4991, 4991,
4991, 5144, 5204, 5783, 5995, 6148, 6209, 6360, 6360, 6360, 6360,
6360, 6360, 6360, 6360, 6360, 6360, 6360, 6360, 6360, 6695, 6940,
7274, 7456, 7578, 7790, 7790, 7790, 7790, 7790, 7790, 7790, 7790,
7790, 7790, 7790, 7790, 7821, 8095, 8674, 8766, 8917, 9039, 9251,
9251, 9251, 9251, 9251, 9251, 9251, 9251, 9251, 9251, 9282, 9282,
9282, 9435, 9556, 10135, 10500, 10592, 10743, 10743, 10743, 10743,
10743, 10743, 10743, 10743, 10743, 10743, 10743, 10743, 10835,
10865, 11017, 11443, 11596, 12173, 12173, 12173, 12173, 12173,
12173, 12173, 12173, 12173, 12173, 12204, 12204, 12296, 12326,
12357, 12418, 12478, 12874, 12935, 13453, 13634, 13634, 13634,
13634, 13634, 13634, 13634, 13634, 13634, 13634, 13634, 13665,
13695, 13939, 14245, 14304, 14304, 14914, 15095, 15095, 15095,
15095, 15095, 15095, 15095, 15095, 15095, 15095, 15095, 15095,
15126, 15400, 15400, 15614, 15614, 15645, 16102, 16495, 16556,
16556, 16556, 16556, 16556, 16556, 16556, 16556, 16556, 16556,
16556, 16556, 16587, 16679, 17045, 17045, 17501, 17622, 17928,
17987, 18017, 18017, 18017, 18017, 18017, 18017, 18017, 18017,
18017, 18017, 18017, 18017), class = "Date")), row.names = c(NA,
-398L), class = c("tbl_df", "tbl", "data.frame"))
代码:
test1$leaderFactor <- "none"
for(i in test1$leaderFactor){
if(test1$party[i]=="PSOE" &
test1$elecTypeDate[i] > as_date("1977-01-01") &
test1$elecTypeDate[i] < as_date("1997-06-30")){
test1$leaderFactor[i] = "Gonzales"
} else {
test1$leaderFactor[i] = "Rest"}}
sum(is.na(test1$elecTypeDate))
sum(is.na(test1$party))
【问题讨论】:
-
顺便说一句,您无需将变量转换为因子即可使用
group_by。 -
试试
as.Date,对我有用。 -
df <- data.frame(group=rep(c(1,2),each=3), date=rep(c("2001-06-01", "2002-10-01", "2003-06-01"),2), stringsAsFactors = FALSE); df$futureFactor <- ifelse(df$group==1 & df$date > "2001-01-01" & df$date < "2002-12-31", "a", "b") -
@jay.sf 使用
as.Date而不是as_date会产生完全相同的错误。 -
@KonradRudolph 使用
R 4.0.0,只加载了基础包,没有错误,抱歉。
标签: r for-loop if-statement