【发布时间】:2021-10-24 18:15:49
【问题描述】:
我正在尝试用来自不同行的值填充一行中的 NA。这些行通过案例编号“链接”。我想编写一个遍历整个数据帧并执行此操作的 if 循环。但我认为我对 R 语言的掌握不够好。有人可以帮帮我吗?
数据框:
CASE <- c(1, 2, 3, 4, 5, 6)
SERIAL <-c("AB",NA, NA, "CD", NA, NA)
REF <- c(NA, 1, 1, NA, 4, 4)
PA <- c(4, NA, NA, 2, NA, NA)
PE <- c(NA, 2, NA, NA, 1, NA)
PE2 <- c(NA, NA, 3, NA, NA, 3)
df <- data.frame (CASE, SERIAL, REF, PA, PE, PE2)
CASE SERIAL REF PA PE PE2
1 AB NA 4 NA NA
2 <NA> 1 NA 2 NA
3 <NA> 1 NA NA 3
4 CD NA 2 NA NA
5 <NA> 4 NA 1 NA
6 <NA> 4 NA NA 3
在 CASE = 1 行中,我想用下面行中的值填充空的 PE 和 PE2,这些行引用了该行(通过 REF = 1)。在 CASE = 4 行中,我想用下面行中的值填充空的 PE 和 PE2,这些行引用了该行(通过 REF = 4)。可以这么说,没有序列号的行仅用于填充第 1 行和第 4 行。没有办法将数据直接收集到相应的行中。我试过这个 for 循环,但不知道如何正确引用这些值?
for (i in 1:dim(df)[1]{
if (data$SERIAL[i]==NA){
[data$CASE[data$REF[i]],PE] <- data$PE[i]
[data$CASE[data$REF[i]],PE2] <- data$PE2[i]}
}
)
预期输出:
CASE SERIAL REF PA PE PE2
1 1 AB NA 4 2 3
2 2 <NA> 1 NA 2 NA
3 3 <NA> 1 NA NA 3
4 4 CD NA 2 1 3
5 5 <NA> 4 NA 1 NA
6 6 <NA> 4 NA NA 3
【问题讨论】:
-
你能为你的示例输入提供一个预期的输出吗?谢谢。
标签: r loops for-loop if-statement