【发布时间】:2019-01-18 14:11:49
【问题描述】:
我需要更改我的数据框中迭代行的一些值。对于每一行,如果某列中有 1,我需要将其他列中的 0 值更改为 NA。
我有一个可以运行的代码,但是在使用更大的数据集时速度非常慢。
data = data.frame(id=c("A","B","C"),V1=c(1,0,0),V2=c(0,0,0),V3=c(1,0,1))
cols = names(data)[2:4]
for (i in 1:nrow(data)){
if(any(data[i,cols]==1)){
data[i,cols][data[i,cols]==0]=NA
}
}
我有一个示例数据集
data
id V1 V2 V3
1 A 1 0 1
2 B 0 0 0
3 C 0 0 1
预期的(和实际的)结果是
data
id V1 V2 V3
1 A 1 NA 1
2 B 0 0 0
3 C NA NA 1
我怎样才能以更优化的方式编写这个?
【问题讨论】:
-
试试
i1 <- rowSums(data[-1] == 1) > 0;data[-1][i1,] <- NA^ !data[-1][i1,]