【发布时间】:2020-08-30 16:42:20
【问题描述】:
给定下面的数据框:
df <- data.frame(v1 = c(3, 0, 5, 1, 0),
v2 = c(2, 0, 0, 0, 0),
v3 = c(0, 0, 3, 0, 0),
v4 = c(0, 0, 0, 2, 0),
v5 = c(0, 0, 0, 0, 0),
v6 = c(0, 0, 0, 0, 7))
df
v1 v2 v3 v4 v5 v6
1 3 2 0 0 0 0
2 0 0 0 0 0 0
3 5 0 3 0 0 0
4 1 0 0 2 0 0
5 0 0 0 0 0 7
想要的结果是以下数据框:
v1 v2 v3 v4 v5 v6
1 3 2 NA NA NA NA
2 NA NA NA NA NA NA
3 5 0 3 NA NA NA
4 1 0 0 2 NA NA
5 0 0 0 0 0 7
我想用NA 替换每一行中所有连续的零,条件是从左到右查看每一行,该行的下方不存在非零数。
我已经编写了一个 for 循环来实现这个结果,但是对于更大的数据帧来说这真的很慢:
for(i in 1:nrow(df)) {
for (j in 1:ncol(df)){
if ((df[i,j] == 0) & (apply(df[j:ncol(df)], 1, sum)[i] == 0)){
df[i,j] <- NA
}
}
}
我想要一个更有效的解决方案。
【问题讨论】:
标签: r dataframe for-loop replace